Асинхронная 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())
При переходе к элементу пользовательского интерфейса отображается диапазон, созданный сценарием.
本文总阅读量次