跳转至

Psycopg(西科普格酒店)

logfire.instrument_psycopg() 函数可用于使用 Logfire 检测 Psycopg PostgreSQL 驱动程序。它适用于 psycopg2psycopg(即 Psycopg 3)包。

有关详细信息,请参阅 OpenTelemetry Psycopg InstrumentationOpenTelemetry Psycopg2 Instrumentation 包的文档。

安装

使用 psycopg extra 安装 logfire

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

或使用 psycopg2 extra:

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

用法

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

使用 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 logfire
import psycopg

logfire.configure()

# To instrument the whole module:
logfire.instrument_psycopg(psycopg)
# or
logfire.instrument_psycopg('psycopg')
# or just instrument whichever modules (psycopg and/or psycopg2) are installed:
logfire.instrument_psycopg()

connection = psycopg.connect(
    'dbname=database user=user password=secret host=0.0.0.0 port=5432'
)

# Or instrument just the connection:
logfire.instrument_psycopg(connection)

with logfire.span('Create table and insert data'), connection.cursor() as cursor:
    cursor.execute(
        'CREATE TABLE IF NOT EXISTS test (id serial PRIMARY KEY, num integer, data varchar);'
    )

    # Insert some data
    cursor.execute('INSERT INTO test (num, data) VALUES (%s, %s)', (100, 'abc'))
    cursor.execute('INSERT INTO test (num, data) VALUES (%s, %s)', (200, 'def'))

    # Query the data
    cursor.execute('SELECT * FROM test')

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

SQL 注释者

要将 SQL 注释添加到查询的末尾以使用其他上下文丰富数据库日志,请使用 enable_commenter 参数:

导入 Logfire

logfire.configure()
logfire.instrument_psycopg(enable_commenter=真)

这只能在检测整个模块时使用,而不能在检测单个连接时使用。

默认情况下,SQL 注释将包含以下键的值:

  • db_driver
  • dbapi_threadsafety
  • dbapi_level
  • libpq_version
  • driver_paramstyle
  • opentelemetry_values

您可以通过传递包含这些键和值 False 的字典来排除这些键中的任何一个commenter_options,例如:

import logfire

logfire.configure()
logfire.instrument_psycopg(enable_commenter=True, commenter_options={'db_driver': False, 'dbapi_threadsafety': False})

本文总阅读量