使用psycopg2,ValueError使用支持的格式字符'd'

时间:2013-07-01 17:01:14

标签: python postgresql psycopg2

我有这样的代码:

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()调用会出错?

2 个答案:

答案 0 :(得分:5)

%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 :(得分:0)

来自Psycopg FAQ

  

Q:我无法将整数或浮点参数传递给查询:它说一个   数字是必需的,但这是一个数字!

     

A:在查询字符串中,即使传递数字,也必须始终使用%s占位符。所有Python对象都由Psycopg在   它们的SQL表示形式,因此它们以字符串形式传递给查询。   请参阅将参数传递给SQL查询。

mainFrame.add(controlPanel); 替换为%d