Unzufrieden mit PG¶
Die Funktion logfire.instrument_asyncpg() kann verwendet werden , um denLogfirex-PostgreSQL - Treiber asyncpg zu erkennen .
Installiert¶
Installieren Sie logfire mit asyncpg extra :
{{ install_logfire(extras=['asyncpg']) }}
Verwendung¶
Lassen Sie uns eine PostgreSQL-Datenbank mit Docker einrichten und ein Python-Skript ausführen , das asyncpg verwendet , um eine Verbindung zur Datenbank herzustellen , um die Verwendung vonLogfiremit asyncpg zu demonstrieren .
¶
PostgreSQL-Datenbank mit Docker einrichten
Als erstes müssen wir eine PostgreSQL-Datenbank initialisieren , was mit Docker ganz einfach gemacht werden kann , indem wir den folgenden Befehl ausführen :
docker run --name postgres \
-e POSTGRES_USER=user \
-e POSTGRES_PASSWORD=secret \
-e POSTGRES_DB=database \
-p 5432:5432 -d postgres
Dieser Befehl schließt die folgende Operation ab :
-
--name postgres: Definiert den Namen eines Docker-Containers . -
-e POSTGRES_USER=user: Richten Sie einen Benutzer für den PostgreSQL-Server ein . -
-e POSTGRES_PASSWORD=secret: Legt ein Kennwort für den PostgreSQL-Server fest . -
-e POSTGRES_DB=databaseDadurch wird eine neue Datenbank namens " database " erstellt , die der gleichen Datenbank entspricht , die in Python-Skripten verwendet wird . -
-p 5432:5432Dadurch ist die PostgreSQL-Instanz auf dem lokalen Computer unter Port 5432 verfügbar . -
-d postgres: Dies gibt das zu verwendende Docker-Image an , in diesem Fall " postgres " .
Python Skripte ausführen¶
Das folgende Python-Skript stellt eine Verbindung mit der PostgreSQL-Datenbank her und führt einige SQL-Abfragen aus :
import asyncio
import asyncpg
import logfire
logfire.configure()
logfire.instrument_asyncpg()
async def main():
connection: asyncpg.Connection = await asyncpg.connect(
user='user', password='secret', database='database', host='0.0.0.0', port=5432
)
with logfire.span('Create table and insert data'):
await connection.execute('CREATE TABLE IF NOT EXISTS test (id serial PRIMARY KEY, num integer, data varchar);')
# Insert some data
await connection.execute('INSERT INTO test (num, data) VALUES ($1, $2)', 100, 'abc')
await connection.execute('INSERT INTO test (num, data) VALUES ($1, $2)', 200, 'def')
# Query the data
for record in await connection.fetch('SELECT * FROM test'):
logfire.info('Retrieved {record=}', record=record)
asyncio.run(main())
Wenn Sie zum Projekt auf der Benutzeroberfläche gehen , sehen Sie die Spanne , die das Skript erstellt hat .
[ Entelemetry-asyncpg ] :https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/asyncpg/asyncpg.html [ Opentelemetry-asyncpg2 ] oderhttps://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/asyncpg2/asyncpg2.html [ WPG-Mitglied ] :https://magicstack.github.io/asyncpg/
本文总阅读量次