Ошибка SQLAlchemy: «Форматы аргументов нельзя смешивать» при вводе переменных

У меня есть скрипт Python, который запускает файл pgSQL через функцию connection.execute из SQLAlchemy. Вот блок кода в Python:

results = pg_conn.execute(sql_cmd, beg_date = datetime.date(2015,4,1), end_date = datetime.date(2015,4,30)) 

И вот одна из областей, где переменная вводится в мой SQL:

 WHERE ( dv.date >= %(beg_date)s AND dv.date <= %(end_date)s) 

Когда я запускаю это, я получаю загадочную ошибку python:

 sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) argument formats can't be mixed 

… а затем огромный дамп оскорбительного SQL-запроса. Я запустил этот точный код с тем же самым условным условным обозначением. Почему он не работает на этот раз?

  • SQLAlchemy или psycopg2?
  • Потоковые результаты с помощью Blaze и SqlAlchemy
  • One Solution collect form web for “Ошибка SQLAlchemy: «Форматы аргументов нельзя смешивать» при вводе переменных”

    Как оказалось, я использовал оператор SQL LIKE в новом SQL-запросе, а операнд% возился с возможностями экранирования Python. Например:

      dv.device LIKE 'iPhone%' or dv.device LIKE '%Phone' 

    Еще один ответ предложил способ избежать и избежать побега, что, по моему мнению, добавило бы излишней сложности в другой простой код. Вместо этого я использовал способность pgSQL обрабатывать регулярное выражение для изменения самого SQL-запроса. Это изменило указанную выше часть запроса на:

      dv.device ~ E'iPhone.*' or dv.device ~ E'.*Phone$' 

    Поэтому для других: вам может потребоваться изменить ваши LIKE-операторы на regex '~', чтобы заставить его работать. Просто помните, что это будет медленнее для больших запросов. (Больше информации здесь .)

    Python - лучший язык программирования в мире.