Ga naar inhoud

asynchroon PG

logfire.instrument_asyncpg() Functies kunnen worden gebruikt om Logvuur detecteren asyncpg PostgreSQL stuurprogramma.

installeren

Installeer logfire met asyncpg extra:

{{ install_logfire(extras=['asyncpg']) }}

gebruik

Laten we een PostgreSQL-database opzetten met Docker en een Python-script uitvoeren dat verbinding maakt met de database met asyncpg om te demonstreren hoeLogfiremet asyncpg te gebruiken.

Het opzetten van een PostgreSQL database met Docker

Eerst moeten we een PostgreSQL-database initialiseren. Dit kan eenvoudig worden gedaan met Docker met het volgende commando:

docker run --name postgres \
    -e POSTGRES_USER=user \
    -e POSTGRES_PASSWORD=secret \
    -e POSTGRES_DB=database \
    -p 5432:5432 -d postgres

Deze bestelling voltooit de volgende bewerkingen:

  • --name postgres: Definieer de naam van de Docker-container.

  • -e POSTGRES_USER=user: Een gebruiker instellen voor de PostgreSQL server.

  • -e POSTGRES_PASSWORD=secret Stel een wachtwoord in voor de PostgreSQL-server.

  • -e POSTGRES_DB=database Hierdoor wordt een nieuwe database met de naam "database" gemaakt, dezelfde database die wordt gebruikt in Python-scripts.

  • -p 5432:5432 Dit maakt de PostgreSQL-instantie beschikbaar op de lokale computer op poort 5432.

  • -d postgres: Dit geeft de te gebruiken Docker-afbeelding aan, in dit geval "postgres".

Voer een Python-script uit

Het volgende Python-script maakt verbinding met een PostgreSQL-database en voert enkele SQL-query 's uit:

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())

Als u naar het project in de gebruikersinterface gaat, ziet u de reikwijdte van het maken van scripts.


本文总阅读量次