我如何使用Psycopg2的LoggingConnection?

k10*_*107 12 python postgresql psycopg2

我想记录psycopg2正在进行的查询,但psycopg2文档并未真正指定应如何使用LoggingConnection.

import logging
from psycopg2.extras import LoggingConnection

db_settings = {
    "user": "abcd",
    "password": "efgh",
    "host": "postgres.db",
    "database": "dev",
}

conn = LoggingConnection(**db_settings)
Run Code Online (Sandbox Code Playgroud)

给出错误

LoggingConnection(**db_settings)TypeError:函数最多需要2个参数(给定5个)

k10*_*107 18

似乎设置connection_factory=LoggingConnection工作

import logging
import psycopg2
from psycopg2.extras import LoggingConnection

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

db_settings = {
    "user": "abcd",
    "password": "efgh",
    "host": "postgres.db",
    "database": "dev",
}

conn = psycopg2.connect(connection_factory=LoggingConnection, **db_settings)
conn.initialize(logger)

cur = conn.cursor()
cur.execute("SELECT * FROM table LIMIT 5")
Run Code Online (Sandbox Code Playgroud)


Luk*_*raf 6

如果您想直接使用LoggingConnection,则需要将 DSN 作为libpq 连接字符串提供给LoggingConnection()- 键/值连接字符串或连接 URI 都可以:

from psycopg2.extras import LoggingConnection

DSN = "postgresql://john:secret@localhost/mydb"
#DSN = "host=localhost dbname=mydb user=john password=secret"

logfile = open('db.log', 'a')

conn = LoggingConnection(DSN)
conn.initialize(logfile)

cur = conn.cursor()
cur.execute('SELECT 1')
Run Code Online (Sandbox Code Playgroud)

但是,我可能会使用像 @kristi 演示的连接工厂。