pg8000.core.ProgrammingError: "не удалось определить тип данных параметра $2"

Я использую 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: ('ОШИБКА', 'ОШИБКА', '42P18', 'не удалось определить тип данных параметра $2', 'postgres.c', '1350', 'exec_parse_message', '', '')

Тем не менее, когда я запускаю тот же запрос с помощью инструмента GUI, все работает нормально, и я получаю результаты. В чем проблема?

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

Другие вопросы по тегам