Производство Psycopg2 уместно mogrify?

Я хочу сделать именно то, что cursor.mogrify делает, но в производстве соответствующим образом.

Я обновляю некоторый устаревший код Python, который строит запросы путем объединения строк. Мне нужно изменить это, чтобы безопасно сбежать.

Запросы являются длинными и построены на другом сервере, чем они выполняются, поэтому обычный процесс использования cursor.execute бежать - непривлекательно с точки зрения ясности кода и практической жизнеспособности.

Я бы использовал mogrify, но я понимаю, что он предназначен только для целей отладки.

Я оглянулся и не могу найти хороший ответ на это. Что ты предлагаешь?

1 ответ

Решение

Не используйте tuple, Использовать dictionary

d = {'p1': val1, 'p2': val2}
cur.execute("""
    select *
    from t
    where col1 = %(p1)s and col2 = %(p2)s
    """, d
)

Если есть необязательные параметры, передайте тогда как нуль

d = {'p1': None, 'p2': val2}
cur.execute("""
    select *
    from t
    where
        (%(p1)s is null or col1 = %(p1)s)
        and
        (%(p2)s is null or col2 = %(p2)s)
    """, d
)

Установить ssh подключение к серверу и подключение через него.

ssh -L 5432:localhost:5432 remotehost.com
Другие вопросы по тегам