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