Как отобразить строку SQL, созданную курсором MySQLDB? - PullRequest
4 голосов
/ 20 октября 2011

Я хотел бы проверить для себя, как эта строка MySQL переводится курсором:

cursor.execute("SELECT * from elements where id = %s", (element_id))

Есть ли способ получить вычисленную строку SQL и распечатать ее, предпочтительно перед выполнением?(последнее не является абсолютно необходимым - я просто делаю это, потому что я изучаю Python и хочу убедиться, что мои строки SQL очищаются)

Ответы [ 2 ]

6 голосов
/ 20 октября 2011

Да. Как указал Фердинанд, существует MySQLdb/cursors.py, содержащий execute(), что в свою очередь вызывает _query().

Это помещает выполненный запрос в self._executed.

Так что вы можете получить его от cursor._executed.

1 голос
/ 20 октября 2011

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.

...