Если да, то как я могу это сделать?Могу ли я получить исходный SQL, сгенерированный подготовленным оператором в модуле sqlite3 Python?
Могу ли я получить исходный SQL, сгенерированный подготовленным оператором в модуле sqlite3 Python?
ответ
При создании подготовленного оператора SQL-код шаблона уже отправляется в СУБД, который скомпилирует его в дерево выражений. Когда вы передаете значения, соответствующая библиотека (модуль python sqlite3 в вашем случае) не объединяет значения в оператор. СУБД делает.
Если вы все еще хотите создать обычную строку SQL, вы можете использовать функции замены строк, чтобы заменить заполнители на значения (после их избежания).
Для чего вам это нужно?
При выполнении подготовленного оператора не создается новый SQL. Идея подготовленных операторов состоит в том, что запрос SQL и его данные передаются отдельно (поэтому вам не нужно избегать каких-либо аргументов) - запрос, скорее всего, сохраняется только в оптимизированной форме после его подготовки.
Ах! Спасибо. Я не знал, как это сработало. Имеет смысл :) –
К сожалению, мне нужно сгенерировать SQL-совместимый SQL для передачи в другое приложение. Я надеялся использовать что-то вроде sqlite3 или sqlalchemy для выполнения всех экранов и т. Д. –
В этом случае я думаю, что подход с экранированием и заменой строковыми операциями может быть подходящим. Является ли подготовленный оператор также создан для SQLite? Если нет, вам может понадобиться преобразовать некоторые выражения из диалекта другого DB на диалект SQLite. В Java hibernate предоставляет классы для генерирования выражений, специфичных для диалектов. Я не уверен, предоставит ли он функции «вырожденным» выражениям, специфичным для диалектов, для преобразования их в другой диалект, и я не знаю, как это реализовано в sqlalchemy. – chiccodoro