我该如何使用 Psycopg2 的 LoggingConnection?

26

我想记录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)

出现了错误

LoggingConnection(**db_settings) TypeError: 函数最多接受2个参数,但提供了5个

2个回答

38

似乎设置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")

你好,感谢提供的示例。我个人需要控制台输出。例如,客户端在 SQL 语句结尾打印以下内容到 STOUT:[2019-07-15 15:59:51] 1 行数据已检索自第 1 行,耗时 2 秒 318 毫秒(执行:2 秒 279 毫秒,获取:39 毫秒) - Jonathan

6
如果想直接使用LoggingConnection,需要向LoggingConnection()提供DSN作为libpq连接字符串,可以使用键/值连接字符串或连接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')

然而,我可能会使用类似@kristi演示的连接工厂。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接