Lewati ke isi

PG asinkron

logfire.instrument_asyncpg() Fungsi dapat digunakan untuk Logfire mendeteksi asyncpg Pengemudi PostgreSQL.

menginstal

Instal logfire dengan asyncpg ekstra:

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

penggunaan

Mari kita atur database PostgreSQL menggunakan Docker dan jalankan skrip Python yang terhubung ke database menggunakan asyncpg untuk mendemonstrasikan cara menggunakanLogfiredengan asyncpg.

Menyiapkan database PostgreSQL dengan Docker

Pertama, kita perlu menginisialisasi database PostgreSQL. Ini dapat dengan mudah dilakukan menggunakan Docker dengan perintah berikut:

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

Perintah ini melengkapi operasi berikut:

  • --name postgres: Tentukan nama wadah Docker.

  • -e POSTGRES_USER=user: Siapkan pengguna untuk server PostgreSQL.

  • -e POSTGRES_PASSWORD=secret Tetapkan kata sandi untuk server PostgreSQL.

  • -e POSTGRES_DB=database Ini akan membuat database baru yang disebut "database," database yang sama yang digunakan dalam skrip Python.

  • -p 5432:5432 Hal ini membuat instance PostgreSQL tersedia di komputer lokal pada port 5432.

  • -d postgres: Ini menunjukkan gambar Docker untuk digunakan, dalam hal ini "postgres."

Jalankan skrip Python

Script Python berikut terhubung ke database PostgreSQL dan mengeksekusi beberapa kueri 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())

Jika Anda pergi ke proyek di UI, Anda akan melihat rentang pembuatan skrip.


本文总阅读量次