我有这样的代码:
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()
调用的错误?
各地%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))
问:我可以不是一个整数或浮点数参数传递给我查询:它说需要一个数字,但它是一个数字!
答:在您的查询字符串,你总是要使用%s的占位符,传递一个数字时也是如此。所有的Python对象由Psycopg在他们的SQL表示转化,使他们获得传递给查询字串。请参见将参数传递给SQL查询。
替换%d
的%s
。