【问题标题】:ValueError usupported format character 'd' with psycopg2ValueError usupported format character 'd' with psycopg2
【发布时间】:2013-07-01 17:01:14
【问题描述】:

我有这样的代码:

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


    【解决方案1】:

    %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))
    

    【讨论】:

      【解决方案2】:

      来自Psycopg FAQ

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

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

      %d 替换为%s

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 2020-06-06
        • 2016-01-28
        • 1970-01-01
        • 1970-01-01
        • 2022-12-01
        相关资源
        最近更新 更多