2017-11-07 4 views
1

1秒に何十件ものSQLクエリを送信するアプリケーションのトラブルシューティングを行っています。SQLAlchemyが発行したコマンドを削除する方法

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

しかし、どのように私はdelete文をログに記録しない??:私は、このメソッドを使用してSQLAlchemyのによって発行されたすべてのSQL文をログに記録する方法があります知っています

答えて

0

あなたはlogging filterを書くことができます:

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

アイデアは、同様の問題の解決策として、マイク・バイエル、SQLAlchemyの自身の作者によるsuggestedました。

+0

私はこの戦略を試しました。まだすべてが印刷されています。 – Ahmad

+0

@Ahmad SQLAlchemyドキュメントの[Configure Logging](http://docs.sqlalchemy.org/en/latest/core/engines.html#configuring-logging)セクションには、次のようなコメントがあります。*したがって、Pythonロギングを使用する場合は、すべてのエコーフラグが常にFalseに設定されているので、重複したログ行を避けることができます。* 'echo = True'をどこかに渡してもよろしいですか? –

関連する問題