На этом шаге мы рассмотрим выполнение указанного действия.
Иногда возникает необходимость выяснить, какой запрос обрабатывается в данный момент времени, и выполнить при этом какие-либо действия - т. е. произвести трассировку. Именно для таких случаев объект соединения, начиная с Python 3.3, поддерживает метод set_trace_callback(<Функция>). Он позволяет зарегистрировать функцию, которая будет выполнена после обработки каждой команды SQL. Эта функция должна принимать единственный параметр - строку с очередной обрабатываемой SQL-командой, и не должна возвращать результата. Давайте используем этот метод, чтобы выводить на экран каждую команду на доступ к базе данных, что будут выполняться в нашей программе.
import sqlite3 # Объявляем функцию, которая станет выводить команды на экран def tracer (command): print(command) con = sqlite3.connect(r"C:\book\catalog.db") con.set_trace_callback(tracer) # Регистрируем функцию tracer() con.execute("SELECT * FROM user;") con.execute("SELECT * FROM rubr;") con.close()
Результат работы приложения:
SELECT * FROM user;
SELECT * FROM rubr;
В результате выполнения этого кода каждый раз, когда вызывается метод execute (), на экране будет появляться код SQL-запроса к базе, выполняемого этим методом.
Чтобы отменить трассировку запросов, следует вызвать метод set_trace_callback(), передав ему в качестве параметра None:
con.set_trace_callback(None)
Со следующего шага мы начнем рассматривать организацию доступа к базам данных MySQL.