PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

मैं क्वेरी निष्पादन समय के psycopg2 लॉगिंग कैसे प्राप्त करूं?

निष्पादन की शुरुआत में टाइमस्टैम्प सेट करने और अंत में अवधि की गणना करने के लिए काफी आसान है। आपको लॉगिंगकनेक्शन और लॉगिंग कर्सर के अपने स्वयं के सरल उपवर्गों की आवश्यकता होगी। मेरा उदाहरण कोड देखें।

यह 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() . के अंदर यदि आप कुछ मान से कम हैं, तो आप स्वरूपण बदल सकते हैं, या प्रदर्शित नहीं करना चुन सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में पुनरावर्ती ट्रिगर रोकें

  2. लोअर लाइक बनाम आईलाइक

  3. PostgreSQL डेटाबेस को SQLServer एक में कैसे माइग्रेट करें?

  4. गतिशील क्वेरी पोस्टग्रेज

  5. Django में केस असंवेदनशील अद्वितीय मॉडल फ़ील्ड?