2015-03-09 32 views
5

Chciałbym zalogować zapytania, które robi psycopg2, ale psycopg2 documentation tak naprawdę nie określa sposobu użycia LoggingConnection.Jak korzystać z LoggingConnection Psycopg2?

import logging 
from psycopg2.extras import LoggingConnection 

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

conn = LoggingConnection(**db_settings) 

daje błąd

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

Odpowiedz

9

wydaje się ustawienie connection_factory=LoggingConnection prace

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

Jeśli chcesz użyć LoggingConnection bezpośrednio, trzeba dostarczyć DSN postaci libpq connection string do LoggingConnection() - albo ciąg połączenia klucza/wartości lub identyfikator URI połączenia działa:

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

Jednak prawdopodobnie użyłbym fabryki połączeń, takiej jak @kristi.