我有这样的代码:
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()
调用会出错?
答案 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
。