跳转至

异步PG

logfire.instrument_asyncpg() 函数可用于使用 Logfire 检测 asyncpg PostgreSQL 驱动程序。

安装

使用 asyncpg extra 安装 logfire

pip install 'logfire[asyncpg]'
rye add logfire -E asyncpg
poetry add 'logfire[asyncpg]'

用法

让我们使用 Docker 设置一个 PostgreSQL 数据库,并运行一个使用 asyncpg 连接到数据库的 Python 脚本,以演示如何将 Logfire 与 asyncpg 一起使用。

使用 Docker 设置 PostgreSQL 数据库

首先,我们需要初始化一个 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())

如果转到 UI 上的项目,将看到脚本创建的跨度。


本文总阅读量