【问题标题】:pg8000.core.ProgrammingError: 'could not determine data type of parameter $2'pg8000.core.ProgrammingError: '无法确定参数 $2 的数据类型'
【发布时间】:2018-08-20 18:31:12
【问题描述】:

我正在使用 pg.8000 (Postgres) 并尝试运行以下 SELECT 查询

cursor.execute(
        """
        SELECT orders.name, orders.order_price, orders.selling_price, orders.earnings
        FROM member, orders
        WHERE member.id=orders.member_id
        AND member.name = %s
        """,
        member_username
    )

member.username 是一个字符串。

但我收到以下错误。

pg8000.core.ProgrammingError: ('ERROR', 'ERROR', '42P18', 'could not determine data type of parameter $2', 'postgres.c', '1350', 'exec_parse_message', '', '')

但是,当我使用 GUI 工具运行相同的查询时,一切都运行良好并且我得到了结果。有什么问题?

【问题讨论】:

  • member_username 中有什么内容?
  • 我正在传递的字符串...
  • 我的意思是它可能是空的或不正确的字符串。你检查了吗?
  • 是的,我已经检查过了,没关系...
  • 我发现它即将解析那个字符串......所以我找到了一个解决方案,但仍然对它发生的原因感到困惑。这里的情况是:cursor.execute( """ SELECT orders.name, orders.order_price, orders.selling_price, orders.earnings FROM member, orders WHERE member.id = orders.member_id AND member.name = '{}' """.format(member_username) )

标签: postgresql pg8000


【解决方案1】:

你传递的参数错误,你应该给一个元组,一个列表或一个字典

元组示例:

cursor.execute(
        """
        SELECT orders.name, orders.order_price, orders.selling_price, orders.earnings
        FROM member, orders
        WHERE member.id=orders.member_id
        AND member.name = %s
        """,
        (member_username,)
    )

列表示例:

cursor.execute(
        """
        SELECT orders.name, orders.order_price, orders.selling_price, orders.earnings
        FROM member, orders
        WHERE member.id=orders.member_id
        AND member.name = %s
        """,
        [member_username]
    )

字典示例:

cursor.execute(
        """
        SELECT orders.name, orders.order_price, orders.selling_price, orders.earnings
        FROM member, orders
        WHERE member.id=orders.member_id
        AND member.name = %(mname)s
        """,
        {'mname' : member_username}
    )

http://initd.org/psycopg/docs/usage.html#query-parameters

【讨论】:

  • 是的,这就是为什么!谢谢!
猜你喜欢
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 2019-03-02
  • 2021-07-28
  • 2018-02-19
  • 2017-10-29
  • 2020-05-16
相关资源
最近更新 更多