2011-06-14 18 views
10

SQLAlchemy kullanıyorum ve yürütüldü SQL kodunu (yani, önceden bağlanmış ve değiştirilen tüm bağ tanımlama parametrelerine sahip kod) günlüğe kaydetmek istiyorum. psycopg2 durumunda, Cursor nesnesinin query özniteliği kullanılarak kullanılabilir (bkz. psycopg documentation). MySQLdb durumunda, Cursor nesnesinin _last_executed özniteliği kullanılarak mümkündür.SQLAlchemy'den çalıştırılan SQL kodu nasıl alınır

Soruma göre: SQLAlchemy arabirimlerini kullanarak yürütülen yürütme dizesini nasıl alabilirim? Böyle bir işlev sağlıyor mu yoksa kendi yardımcı işlevimi mi yazmalıyım?

Yardımlarınız için şimdiden teşekkür ederiz.

cevap

21

SQLAlchemy uses the standard Python logging library. db.log adlı bir dosyaya sorguları oturum açmak için: Python günlüğünü kullanırken

import logging 

logging.basicConfig(filename='db.log') 
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) 

, yinelenen günlüğü önlemek için, tüm echo bayrakları False ayarlanır olun.

>>> Movie(title=u"Blade Runner", year=1982) 
>>> session.commit() 

gibi bir şey kaydeder:: Artık db şey eklemek

INFO:sqlalchemy.engine.base.Engine:BEGIN (implicit) 
INFO:sqlalchemy.engine.base.Engine:INSERT INTO models_movie (title, year, description) VALUES (%(title)s, %(year)s, %(description)s) RETURNING models_movie.id 
INFO:sqlalchemy.engine.base.Engine:{'title': u'Blade Runner', 'description': None, 'year': 1982} 
INFO:sqlalchemy.engine.base.Engine:COMMIT 
+1

Doğru, ama (a) bu da Stdout'a mesajlar gönderebilir, (b) tarafından da benzer bir etki ayarlayabilirsiniz Sadece belirli bir motorun echo' özniteliğini True olarak ayarlama ve (c) SQLA'nın günlüğe kaydetmesi, değiştirilen SQL ve parametreleri ayrı ayrı kaydetse de, yer tutucularla değiştirilen sorguyu göstermez. –

+1

@Vinay Bunlar iyi noktalardır, python günlüğünün özel olarak bir dosyaya nasıl kaydedileceğini göstermek için yanıtımı güncelleştirdim ve günlüğe kaydetme çıktısı örneğini gösterme – zeekay

+1

Bu harika, ve zaten çok iyiydiniz :-) –

İlgili konular