2017-09-12 18 views
1

我在Postgres中有一個表格,列名爲TIME(UpperCase)。 使用SQL命令從Postgres自身將csv插入到此表中非常簡單。無法從Python訪問帶有「TIME」列的表格

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

但使用下面的Python代碼插入相同的CSV到表給我一個錯誤的

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

錯誤:

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

我發現它的最佳實踐,以保持列小寫,但有沒有解決它的辦法?

+1

該錯誤表明您的Python代碼認爲第一行是數據,而不是頭。因此它發送'TIME'值插入到該列中 - 這顯然不起作用。它與UPPER或小寫字母名稱無關。您需要將'HEADER'選項的等效項傳遞給該Python方法。 (請注意[數據庫的名稱](https://wiki.postgresql.org/wiki/FAQ#What_is_PostgreSQL.3F_How_is_it_pronounced.3F_What_is_Postgres.3F)是Postgres或PostgreSQL。它不是** PostGREsql或PostGre或PosGreSQL ) –

+0

@馬斯沒有名字:感謝分享的反饋。我現在得到了這個問題。 – MoChen

回答

0

通過使用「copy_expert」更改我的查詢的語法來添加標題,從而實現它的工作。

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)