2015-03-09 9 views
5

Ich möchte die Abfragen protokollieren, die psycopg2 macht, aber die psycopg2 documentation legt nicht wirklich fest, wie LoggingConnection verwendet werden soll.Wie verwende ich LoggingConnection von Psycopg2?

import logging 
from psycopg2.extras import LoggingConnection 

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

conn = LoggingConnection(**db_settings) 

gibt einen Fehler

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

Antwort

9

wie die Einstellung der connection_factory=LoggingConnection Werke

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

Wenn Sie direkt LoggingConnection verwenden möchten, müssen Sie den DSN als libpq connection string zu LoggingConnection() bieten scheint - Entweder funktioniert eine Schlüssel/Wert-Verbindungszeichenfolge oder eine Verbindungs-URI:

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

Allerdings würde ich wahrscheinlich eine Verbindungsfabrik wie @kristi demonstrieren.