1

我正在使用 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 工具运行相同的查询时,一切运行正常并且我得到了结果。问题是什么?

4

1 回答 1

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

于 2018-03-12T17:56:01.933 回答