How do I use Psycopg2's LoggingConnection?

二次信任 提交于 2019-12-08 16:15:48

问题


I'd like to log the queries that psycopg2 is making, but the psycopg2 documentation doesn't really specify how LoggingConnection should be used.

import logging
from psycopg2.extras import LoggingConnection

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

conn = LoggingConnection(**db_settings)

Gives an error

LoggingConnection(**db_settings) TypeError: function takes at most 2 arguments (5 given)


回答1:


Seems like setting the connection_factory=LoggingConnection works

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")



回答2:


If you want to use LoggingConnection directly, you need to provide the DSN as a libpq connection string to LoggingConnection() - either a key/value connection string or a connection URI works:

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')

However, I would probably use a connection factory like @kristi demonstrated.



来源:https://stackoverflow.com/questions/28950212/how-do-i-use-psycopg2s-loggingconnection

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!