Я пытаюсь записать все запросы SQLAlchemy в консоль, анализируя запрос и заполняя параметры (например, перевод :param_1
на 123
). Мне удалось найти этот answer на SO, который делает именно это. Проблема, с которой я сталкиваюсь, заключается в том, что параметры не всегда переводятся.Как распечатать фактический запрос, сгенерированный SQLAlchemy?
Вот это событие, я защелкивания на -
@event.listens_for(Engine, 'after_execute', named=True)
def after_cursor_execute(**kw):
conn = kw['conn']
params = kw['params']
result = kw['result']
stmt = kw['clauseelement']
multiparams = kw['multiparams']
print(literalquery(stmt))
Выполнение этого запроса не сможет перевести свои параметры. Вместо этого я буду видеть :param_1
на выходе -
Model.query.get(123)
Это дает CompileError
исключение с сообщением Bind parameter '%(38287064 param)s' without a renderable value not allowed here.
.
Однако, этот запрос будет переводить :param_1
в 123
как я ожидал бы -
db.session.query(Model).filter(Model.id == 123).first()
Есть ли способ, чтобы перевести любые запросы, которые выполняются с помощью SQLAlchemy?
FWIW Я нацелился на SQL Server, используя драйвер pyodbc
.
Проблема с этим состоит в том, что параметры не встраиваются в запрос что затрудняет копирование/вставку в базу данных без ручного заполнения отсутствующих регистраторов параметров. – onetwothree