Перейти к содержанию

Асинхронная PG

logfire.instrument_asyncpg() Функции доступны для использования Logfire. Проверка Asyncpg Драйвер PostgreSQL.

Монтаж

Установите logfire с помощью asyncpg extra:

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

Использование

Давайте настроить базу данных PostgreSQL с помощью Docker и запустим скрипт Python, подключенный к базе данных с помощью asyncpg, чтобы показать, как использоватьLogfireс asyncpg.

Настройка баз данных PostgreSQL с помощью Docker

Во-первых, нам нужно инициализировать базу данных PostgreSQL. Это можно легко сделать с помощью Docker, используя следующую команду:

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

Эта команда выполняет следующие действия:

  • --name postgres Определяет имя контейнера Docker.

  • -e POSTGRES_USER=user Настройка пользователей для сервера PostgreSQL.

  • -e POSTGRES_PASSWORD=secret Установка пароля для сервера PostgreSQL.

  • -e POSTGRES_DB=database Это создаст новую базу данных под названием "database", аналогичную той, которая используется в скриптах Python.

  • -p 5432:5432 Это делает экземпляр PostgreSQL доступным на локальном компьютере через порт 5432.

  • -d postgres: Это означает образ Docker, который будет использоваться, в данном случае-«postgres».

Запуск скриптов Python

Следующие сценарии Python подключаются к базе данных PostgreSQL и выполняют некоторые 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())

При переходе к элементу пользовательского интерфейса отображается диапазон, созданный сценарием.


本文总阅读量次