【问题标题】:psycopg2 module syntax error at or near "/"“/”处或附近的 psycopg2 模块语法错误
【发布时间】: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


【解决方案1】:

这对我有用:

import io, sys, psycopg2
conn = psycopg2.connect(dbname='sweden')
c = conn.cursor()
c.execute('CREATE TEMPORARY TABLE t("x/y" INTEGER)')
f = io.StringIO('4711')
c.copy_from(f, 't', columns=['"x/y"'])
c.execute('SELECT * FROM t')
print(list(c))

即,为“有趣”列名包含显式双引号。恕我直言,您必须这样做有点难看,但话又说回来,文档明确表示它是表名所必需的,因此列的工作方式相同是有道理的。

【讨论】:

    猜你喜欢
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2018-03-12
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    相关资源
    最近更新 更多