2017-11-07 6 views
1

Ich arbeite an einer Anwendung, die Dutzende von SQL-Abfragen pro Sekunde sendet. Ich weiß, es gibt einen Weg, um alle SQL-Anweisungen von sqlalchemy mit dieser Methode ausgegeben zu protokollieren:Wie bekomme ich NUR Löschbefehle, die von SQLAlchemy ausgegeben werden

import logging 
logging.basicConfig() 
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) 

Aber wie melde ich mich nur delete Aussagen ??

Antwort

0

Sie können logging filter schreiben:

import logging 
from sqlalchemy import create_engine 

class Filter(logging.Filter): 
    def filter(self, record): 
     return 'DELETE' in record.msg 

logging.basicConfig() 
logging.getLogger('sqlalchemy.engine.base.Engine').setLevel(logging.INFO) 
logging.getLogger('sqlalchemy.engine.base.Engine').addFilter(Filter()) 

e = create_engine("sqlite://") 
e.execute("CREATE TABLE t(c);") 
e.execute("INSERT INTO t (c) VALUES (NULL);") 
e.execute("SELECT NULL") 
e.execute("DELETE FROM t WHERE c = NULL") 

Idee war suggested von Mike Bayer, der Autor von SQLAlchemy selbst, als eine Lösung für ähnliches Problem.

+0

Ich habe gerade diese Strategie versucht. Es druckt immer noch alles. – Ahmad

+0

@Ahmad In [Konfigurieren der Protokollierung] (http://docs.sqlalchemy.org/en/latest/core/engines.html#configuring-logging) Abschnitt von SQLAlchemy docs gibt es diese Bemerkung: * Daher, wenn Python-Protokollierung verwenden, stellen Sie sicher Alle Echo-Flags werden immer auf False gesetzt, um doppelte Log-Zeilen zu vermeiden. * Sind Sie sicher, dass Sie 'echo = True 'nicht irgendwo übergeben? –

Verwandte Themen