2015-03-09 16 views
5

Vorrei registrare le query eseguite da psycopg2, ma lo psycopg2 documentation non specifica in realtà come utilizzare LoggingConnection.Come utilizzare LoggingConnection di Psycopg2?

import logging 
from psycopg2.extras import LoggingConnection 

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

conn = LoggingConnection(**db_settings) 

dà un errore

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

risposta

9

Sembra come l'impostazione dei connection_factory=LoggingConnection opere

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

Se si desidera utilizzare LoggingConnection direttamente, è necessario fornire il DSN come libpq connection string a LoggingConnection() - una stringa di connessione chiave/valore o un URI di connessione funziona:

from psycopg2.extras import LoggingConnection 

DSN = "postgresql://john:[email protected]/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') 

Tuttavia, probabilmente utilizzerei un factory di connessione come @kristi ha dimostrato.

Problemi correlati