ValueError异常usupported格式字符 'd' 与psycopg2

问题描述 投票:2回答:2

我有这样的代码:

print "company_id = %d" % company_id
...
db.cursor.execute("insert into person (company_id, first, last, type) values (%d, '%s', '%s', %d);", (company_id, name[0], name[1], type))

我得到以下的输出:

company_id = 1
Traceback (most recent call last):
...
  File "./GetPeople.py", line 125, in insertPerson
    db.cursor.execute("insert into person (company_id, first, last, type) values (%d, '%s', '%s', %d);",     

它为什么能打印出第一行,但它给出了db.cursor.execute()调用的错误?

python postgresql psycopg2
2个回答
6
投票

各地%s的占位符的单引号是不正确的并且%d,不使用as per the docs。更改

db.cursor.execute("insert into person (company_id, first, last, type) values (%d, '%s', '%s', %d);", (company_id, name[0], name[1], type))

db.cursor.execute("insert into person (company_id, first, last, type) values (%s, %s, %s, %s);", (company_id, name[0], name[1], type))

1
投票

Psycopg FAQ

问:我可以不是一个整数或浮点数参数传递给我查询:它说需要一个数字,但它是一个数字!

答:在您的查询字符串,你总是要使用%s的占位符,传递一个数字时也是如此。所有的Python对象由Psycopg在他们的SQL表示转化,使他们获得传递给查询字串。请参见将参数传递给SQL查询。

替换%d%s

© www.soinside.com 2019 - 2024. All rights reserved.