#python #postgresql #psycopg2 #parameterized-query
#python #postgresql #psycopg2 #параметризованный запрос
Вопрос:
Пытаюсь использовать параметры в моем запросе для Postgres, используя Psycopg2. Когда я выполняю поиск в Google, я вижу, что люди используют %s
но я хочу дать более описательные имена, как вы видите, что я делаю ниже, чтобы позже я мог потенциально добавить больше столбцов в предложение WHERE и оно было более легко читаемым. Возможно ли это? Что я делаю не так?
q = ""
q = "SELECT"
q = " id"
q = " FROM tbl_users "
q = " WHERE "
q = "("
q = " b_enabled = (%enabled)"
q = ")"
enabled = "True"
db_cursor.execute(q,enabled)
К вашему сведению: я понимаю, что в этом случае я мог бы просто указать «True» в качестве второго параметра в методе execute, но это сокращенная версия моего кода, чтобы сосредоточиться на проблеме. Я хочу знать, как поместить переменную в execute, а не жесткий код «True» в этом месте.
Сообщение об ошибке:
psycopg2.ошибки.Ошибка синтаксиса: синтаксическая ошибка в строке 1 «$» или около нее: …d_visit_last ИЗ tbl_users, ГДЕ ( b_enabled = ($t_enabled…
Ответ №1:
Возможно, вам захочется использовать многострочную строку для определения вашего SQL-запроса, чтобы предоставить более значимые имена, вы можете использовать словарь для передачи значений в psycopg2.execute():
import psycopg2
conn = psycopg2.connect("dbname=mf port=5959 host=localhost user=mf_usr")
cur = conn.cursor()
sql = """
SELECT
id
FROM tbl_users
WHERE
b_enabled = %(enabled)s
"""
print (cur.mogrify(sql, {'enabled': "True"}).decode('utf-8'))
# cur.execute(sql, {'enabled': "True"})
Вывод:
SELECT
id
FROM tbl_users
WHERE
b_enabled = 'True'
Пожалуйста, взгляните на официальные документы для получения дополнительной информации.
Комментарии:
1. Спасибо! Еще одна вещь. Могу ли я включить переменную в том месте, где вы указали «True» в инструкции execute? Пытаюсь сейчас… ЭТО СРАБОТАЛО:
db_cursor.execute(q, {'t_enabled': t_enabled})