SQLite3¶
The logfire.instrument_sqlite3() method can be used to instrument the
sqlite3 standard library module. This will automatically create spans for each SQL query executed.
Installation¶
Install logfire with the sqlite3 extra:
pip install 'logfire[sqlite3]'
uv add 'logfire[sqlite3]'
poetry add 'logfire[sqlite3]'
Usage¶
We can use the sqlite in-memory database to demonstrate the usage of the
logfire.instrument_sqlite3() method.
You can either instrument the sqlite3 module or instrument a specific connection.
Instrument the module¶
Here's an example of instrumenting the sqlite3 module:
import sqlite3
import logfire
logfire.configure()
logfire.instrument_sqlite3()
with sqlite3.connect(':memory:') as connection:
cursor = connection.cursor()
cursor.execute('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)')
cursor.execute("INSERT INTO users (name) VALUES ('Alice')")
cursor.execute('SELECT * FROM users')
print(cursor.fetchall())
# > [(1, 'Alice')]
Instrument a connection¶
As mentioned, you can also instrument a specific connection. Here's an example:
import sqlite3
import logfire
logfire.configure()
with sqlite3.connect(':memory:') as connection:
connection = logfire.instrument_sqlite3(connection)
cursor = connection.cursor()
cursor.execute('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)')
cursor.execute("INSERT INTO users (name) VALUES ('Alice')")
cursor.execute('SELECT * FROM users')
print(cursor.fetchall())
# > [(1, 'Alice')]
Avoid using execute from sqlite3.Connection
The execute method from Connection is not instrumented!
You should use the execute method from the Cursor object instead.
See opentelemetry-python-contrib#3082 for more information.
logfire.instrument_sqlite3() uses the
OpenTelemetry SQLite3 Instrumentation package,
which you can find more information about here.