Zum Inhalt

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=database Dadurch wird eine neue Datenbank namens " database " erstellt , die der gleichen Datenbank entspricht , die in Python-Skripten verwendet wird .

  • -p 5432:5432 Dadurch 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/


本文总阅读量次