8

我有这样的代码:

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

4

2 回答 2

14

%s 占位符周围的单引号不正确,并且 %d 未按照文档使用。改变

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))
于 2013-07-01T17:09:57.137 回答
5

来自Psycopg 常见问题解答

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

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

替换%d%s

于 2019-02-12T09:32:46.310 回答