निष्पादन की शुरुआत में टाइमस्टैम्प सेट करने और अंत में अवधि की गणना करने के लिए काफी आसान है। आपको लॉगिंगकनेक्शन और लॉगिंग कर्सर के अपने स्वयं के सरल उपवर्गों की आवश्यकता होगी। मेरा उदाहरण कोड देखें।
यह MinTimeLoggingConnection के स्रोत पर आधारित है जिसे आप psycopg2/extras.py
में पा सकते हैं स्रोत।
import time
import psycopg2
import psycopg2.extensions
from psycopg2.extras import LoggingConnection, LoggingCursor
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
# MyLoggingCursor simply sets self.timestamp at start of each query
class MyLoggingCursor(LoggingCursor):
def execute(self, query, vars=None):
self.timestamp = time.time()
return super(MyLoggingCursor, self).execute(query, vars)
def callproc(self, procname, vars=None):
self.timestamp = time.time()
return super(MyLoggingCursor, self).callproc(procname, vars)
# MyLogging Connection:
# a) calls MyLoggingCursor rather than the default
# b) adds resulting execution (+ transport) time via filter()
class MyLoggingConnection(LoggingConnection):
def filter(self, msg, curs):
return msg + " %d ms" % int((time.time() - curs.timestamp) * 1000)
def cursor(self, *args, **kwargs):
kwargs.setdefault('cursor_factory', MyLoggingCursor)
return LoggingConnection.cursor(self, *args, **kwargs)
db_settings = {
....
}
query_txt = "[query_text_from file]"
conn = psycopg2.connect(connection_factory=MyLoggingConnection, **db_settings)
conn.initialize(logger)
cur = conn.cursor()
cur.execute(query_text)
और आपको मिलेगा:
DEBUG: __main__:[query] 3 ms
आपके filter()
. के अंदर यदि आप कुछ मान से कम हैं, तो आप स्वरूपण बदल सकते हैं, या प्रदर्शित नहीं करना चुन सकते हैं।