我的数据来自mongodb
,看起来像
data =
(
{
u'name': 'A',
u'primary_key': 1
},
{
u'name': 'B',
u'primary_key': 2
},
{
u'name': 'C',
u'primary_key': 3
}
)
当我打电话给以下
时cur = conn.cursor()
cur.executemany("""INSERT INTO ddmension(id,name) VALUES (%(primary_key)s, %(name)s)""", data)
说不清楚
ProgrammingError: 'syntax error at or near """"INSERT INTO dimension (id, name) VALUES (1, E\'A\')""""\nLINE 1: """INSERT INTO dimension (id, name) VALUES (1, E\'A\n ^\n'
有人可以指导我的问题是什么吗?我正在关注this教程
谢谢
答案 0 :(得分:0)
我们应该尝试取消引用该错误消息,以便更清楚地了解这里发生了什么。我们可以在Python提示符下执行此操作:
>>> message = 'syntax error at or near """"INSERT INTO dimension (id, name) VALUES (1, E\'A\')""""\nLINE 1: """INSERT INTO dimension (id, name) VALUES (1, E\'A\n ^\n'
>>> print message
syntax error at or near """"INSERT INTO dimension (id, name) VALUES (1, E'A')""""
LINE 1: """INSERT INTO dimension (id, name) VALUES (1, E'A
^
啊,好多了。
通常情况下,Postgres会小心地使用小^
字符指向它混淆的行中的确切位置 - 但是在这里,它指向“行1”标签的中间位置放入混淆它的行的
所以我无法准确地确定错误发生在哪一行,但我有一个非常强烈的猜测:不知何故,你试图围绕你的声明的Python三引号实际上已经传递给Postgres!在Postgres提示几分钟后,我可以找到 方式来获取“语法错误”消息,其“LINE”以三引号开头,实际上是将三重引号手动输入到SQL,它们不属于它们(因为Postgres不理解三重引用;它是一种Python约定):
$ psql postgres
Null display is "NULL".
psql (8.4.8)
Type "help" for help.
postgres=# """SELECT 1""";
ERROR: syntax error at or near """"SELECT 1""""
LINE 1: """SELECT 1""";
^
问题是使用您显示的示例代码无法发生此错误。要得到这个错误,你实际上必须输入这样的Python代码:
cur.executemany('"""INSERT INTO ddmension(id,name) ..."""', data)
还有其他方法可以在Python字符串中获取三引号,但这是最简单的方法。在任何情况下,你的Postgres错误消息肯定会显示三重引号进入你的SQL,所以再次尝试检查你的Python代码,我们将帮助你弄清楚文字引号如何在你的字符串中清盘!