【发布时间】:2020-12-26 13:52:10
【问题描述】:
我想通过 psycopg2 将一个 csv 文件导入 PostgreSQL。但是,csv 文件列名包含特殊字符。我可以使用这些代码行通过 psycopg2 创建一个表。
cursor.execute('''CREATE TABLE crimnalRate(CrimeDate DATE,
CrimeTime TIME,
CrimeCode TEXT,
Location TEXT,
Description TEXT,
"Inside/Outside" TEXT,
Weapon Text,
Post INT,
District TEXT,
Neighborhood TEXT,
Longitude DOUBLE PRECISION,
Latitude DOUBLE PRECISION,
"Location 1" TEXT,
Premise TEXT,
vri_name1 TEXT,
"Total Incidents" INT)''')
当我想使用 copy_from 函数通过这些代码行导入 csv 文件时。
df=open('BD1.csv','r')
cursor.copy_from(df,"crimnalRate", columns=('CrimeDate',
'CrimeTime',
'CrimeCode',
'Location',
'Description',
'Inside/Outside',
'Weapon',
'Post',
'District',
'Neighborhood',
'Longitude',
'Latitude',
'Location 1',
'Premise',
'vri_name1',
'Total Incidents'),sep=",")
而且它总是返回错误psycopg2.errors.SyntaxError: syntax error at or near "/"
我尝试在特殊字符前使用反斜杠或将特殊列名放在双引号中,但它仍然返回相同的错误消息。 如何修复此错误?谁能给我一些建议?谢谢。
【问题讨论】:
-
您是否尝试将包含特殊字符的列名用双引号括起来,例如:
"'Inside/Outside'", "'Total Incidents'"...? -
@MauriceMeyer。事实上,情况恰恰相反。来自文档Copy From:“注意:表名没有被引用:如果表名包含大写字母或特殊字符,则必须用双引号引起来:cur.copy_from(f, ' "TABLE" ')"。为了便于说明,我在 ' 和 " 之间添加了空格。在实际代码中没有空格。
标签: python postgresql psycopg2