Aller au contenu

PG asynchrone

La fonction logfire.instrument_asyncpg() peut être utilisée pour détecter les pilotes asyncpg(](https://magicstack.github.io/asyncpg/) PostgreSQL ™ avecLogfire.

Installation de

Installer logfire avec asyncpg extra:

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

Utilisation de

Configurer une base de données PostgreSQL avec Docker et exécuter un script Python qui se connecte à la base de données avec asyncpg pour montrer comment utiliserLogfireavec asyncpg.

Configurer une base de données PostgreSQL avec Docker

Tout d'abord, nous devons initialiser une base de données PostgreSQL ™, ce qui peut être fait facilement avec Docker en utilisant la commande suivante:

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

Cette commande fait ce qui suit: .

  • --name postgres: Définit le nom du conteneur Docker.

  • -e POSTGRES_USER=user: Configurer un utilisateur pour le serveur PostgreSQL.

  • -e POSTGRES_PASSWORD=secret: Définit un mot de passe pour le serveur PostgreSQL.

  • -e POSTGRES_DB=database: Cela crée une nouvelle base de données appelée « base de données », identique à celle utilisée dans les scripts Python.

  • -p 5432:5432: Cela rend l'instance PostgreSQL disponible sur l'ordinateur local sous le port 5432.

  • -d postgres: Ceci indique le miroir Docker à utiliser, dans ce cas « postgres ».

Exécuter un script Python

Le script Python suivant se connecte à la base de données PostgreSQL et exécute quelques requêtes SQL:

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

Si vous accédez à un projet sur l'interface utilisateur, vous verrez l'étendue créée par le script.


本文总阅读量次