#python #mysql-python
#питон #mysql-python #python
Вопрос:
Я хотел бы проверить для себя, как эта строка MySQL переводится курсором:
cursor.execute("SELECT * from elements where id = %s", (element_id))
Есть ли способ получить вычисленную строку SQL и распечатать ее, желательно перед выполнением? (последнее не является абсолютно необходимым — я просто делаю это, потому что я изучаю Python и хочу убедиться, что мои строки SQL очищаются)
Ответ №1:
ДА. Как указал Фердинанд, существует a MySQLdb/cursors.py
, содержащий an execute()
, который, в свою очередь, вызывает _query()
.
Это помещает выполненный запрос в self._executed
.
Итак, вы можете получить ее из cursor._executed
.
Комментарии:
1. Отлично, спасибо! Еще не начали копаться в функциях python в соответствии с ответом Фердинанда, но полезно знать, где искать.
2. Но какие аргументы вы даете _query ? Требуется только один, кроме self .
3. @MadsSkjern
_query
запускает запрос для выполнения, который совпадает с_executed
. Но вы не должны вызывать ее самостоятельно. Дело было примерно_execute
в этом.
Ответ №2:
MySQL-Python не делает ничего особенного, он просто кодирует каждый аргумент для предотвращения SQL-инъекций и использует стандартный %
оператор Python для замены %s
заполнителей закодированными аргументами.
Если вы действительно хотите увидеть результат, запустите тот же код, cursor.execute()
что и:
from MySQLdb.converters import get_codec
def prepare_sql(cursor, query, args=None):
if args is not None:
query = query % tuple(( get_codec(a, cursor.encoders)(db, a) for a in args ))
return query
См . Определение execute()
, начинающееся со строки 168 в MySQLdb/cursors.py
.