2016-03-26 10 views
1

Ich bin neu in PostgreSQL und odo. Ich habe Folgendes erstellt: (Ich arbeite an Ubuntu).Odo eine CSV-Datei in PostgreSQL-Datenbank

I Superusertestuser und mit diesem Benutzer erstellt haben (Rolle) Ich habe postgresql Datenbank testuser erstellt (von psql läuft und dann DATABASE Testuser CREATE;). In dieser Datenbank befindet sich eine Tabelle mit der Bezeichnung testtable. Ich habe keine Probleme beim Einfügen in diese Datenbank mit psycopg2. Aber ich bin auf das Modul odo für Python gestoßen. Da mein Ziel ist, some_file.csv in die Postgresql-Datenbank zu laden, dachte ich, ich würde es verwenden. Die Verwendung schien ziemlich einfach

import odo 
odo.odo('some_file.csv', 'postgresql://testuser:<password>@127.0.0.1:5432/testuser::testtable') 

Aber es funktioniert nicht, und ich bekomme

NotImplementedError: Unable to parse uri to data resource: postgresql://testuser:<password>@localhost:5432/testuser 

Hinweis: statt <password> Ich habe das Passwort des Testuser.

Vielleicht ist es offensichtlich und ich habe es zu implementieren .. (wie im letzten Absatz here), aber ich dachte, postgresql unterstützt wird (weil postgresql einige Male erwähnt wird, mit Beispielen). Ich habe versucht, here unter Verbindungs-URIs zu suchen, konnte aber keinen Fehler finden. Und here ist odo Dokumentation.

+0

Versuchen Sie, eine CSV-Datei als einzelnen Datenblob oder in eine strukturierte Tabelle (oder mehrere Tabellen) einzufügen. Verstehen Sie die Grundlagen von RDBMS, kennen Sie die Tabellenstruktur? Kennen Sie die Struktur Ihrer CSV-Daten (falls vorhanden)? – roadrunner66

+0

Ja, ich versuche, es in einem einzigen Schritt in eine einzelne Tabelle einzufügen (zumindest beginne ich damit, da ich annehme, dass das der Grundschritt ist). Ich habe irgendwo gelesen, dass 'odo' den COPY-Befehl dafür benutzt. Ich habe die Tabelle erstellt, z. B. wie folgt: "CREATE TABLE-Testtabelle (ID serieller PRIMÄRSCHLÜSSEL, Alter Ganzzahl, Name varchar);" und der Test csv sieht wie folgt aus: "25, John \ n34, Petr", "\ n" steht für neue Zeile. – quapka

Antwort

2

Ich habe odo verwendet, um eine CSV-Datei in Postgresql einzufügen, so wird es unterstützt. Ihre Verbindungs-URI und Ihr Code sind im Wesentlichen die gleichen wie meine. Haben Sie das sqlalchemy Paket installiert? Ich glaube, odo verwendet sowohl sqlalchemy als auch psycopg2 im Hintergrund. Ich war in der Lage, Ihren Fehler auf einem System zu replizieren, ohne sqlalchemy installiert, und die Installation sqlalchemy hat mich über den Fehler hinaus.

+0

Das könnte wirklich sein. Ich habe sqlalchemy nicht installiert. Ich dachte, ich würde den _standard_ import missing error bekommen. Ich werde es versuchen! Danke – quapka

+0

Ich fand ein ähnliches [Problem] (https://github.com/blaze/odo/issues/279) auf GitHub mit der gleichen Auflösung. Es bezieht sich nicht speziell auf Postgres, aber ich stelle mir vor, dass der zugrunde liegende Code für die meisten implementierten Datenbanken auf dieselbe Quelle zurückführt. – root

+0

Ok, danke. Übrigens, weißt du nicht, ob die Konvertierung von xls-> csv funktioniert? Ich habe es nicht vor mir, aber ich denke, ich habe einen ähnlichen Fehler mit 'odo ('', 'my.csv')'. Ich fühle mich dumm, da Odo wirklich einfach zu benutzen ist, oder ist es zu gut um wahr zu sein? – quapka

Verwandte Themen