2017-09-12 2 views
1

Ich habe eine Tabelle in Postgres mit einem Spaltennamen als TIME (UpperCase). Beim Einfügen von CSV in diese Tabelle von Postgres selbst mit SQL-Befehl ist einfach.Tabelle mit "TIME" -Spalte konnte nicht von Python zugegriffen werden

COPY american_district FROM 'O:\Python\PostGREsql\district.csv' WITH CSV HEADER DELIMITER AS ',' NULL AS '\N'; 

aber die gleiche csv in die Tabelle einfügen mit Python Code unten ist mir ein Fehler als

f = open('O:\Python\PostGREsql\district.csv') 
cur_DBKPI.copy_from(f, 'american_district', sep=',', null='') 

ERROR:

psycopg2.DataError: invalid input syntax for type date: "TIME" 
CONTEXT: COPY american_district, line 1, column time: "TIME" 

Ich fand, dass seine bewährte Methode, die Säule zu halten in Kleinbuchstaben, aber gibt es einen Workaround?

+1

Dieser Fehler zeigt an, dass Ihr Python-Code denkt, dass die erste Zeile Daten sind, nicht die Kopfzeile. Und so sendet es den Wert "TIME", der in diese Spalte eingefügt werden soll - was offensichtlich nicht funktionieren wird. Es hat nichts mit UPPER oder Kleinbuchstaben zu tun. Sie müssen das Äquivalent der "HEADER" -Option an diese Python-Methode übergeben. (Beachten Sie, dass [Name der Datenbank] (https://wiki.postgresql.org/wiki/FAQ#What_is_PostgreSQL.3F_How_is_it_it_pronouncated.3F_What_is_Postgres.3F) entweder Postgres oder PostgreSQL ist, nicht ** PostGREsql oder PostGre oder PosGreSQL) –

+0

@Horse ohne Namen: Danke für das Feedback geteilt. Ich habe das Problem jetzt. – MoChen

Antwort

0

Funktioniert, indem ich die Syntax meiner Abfrage ändere, um Header mit "copy_expert" hinzuzufügen.

f = open('O:\Python\PostGREsql\district.csv') 
sql = "COPY american_district FROM STDIN WITH CSV HEADER DELIMITER AS ',' NULL AS '\\N'" 
cur_DBKPI.copy_expert(sql=sql,file=f) 
Verwandte Themen