2011-06-14 12 views
10

से निष्पादित SQL कोड को पुनर्प्राप्त करने के लिए मैं SQLAlchemy का उपयोग कर रहा हूं और को निष्पादित करना चाहता हूं SQL कोड (यानी कोड पहले से उद्धृत और प्रतिस्थापित सभी बाइंड पैरामीटर के साथ कोड)। psycopg2 के मामले में Cursor ऑब्जेक्ट की विशेषता का उपयोग करना संभव था (psycopg documentation देखें)। MySQLdb के मामले में Cursor ऑब्जेक्ट की _last_executed विशेषता का उपयोग करना संभव है।SQLAlchemy

मेरा प्रश्न है: मैं SQLAlchemy इंटरफेस का उपयोग करके केवल निष्पादित क्वेरी स्ट्रिंग को कैसे पुनर्प्राप्त कर सकता हूं? क्या यह ऐसी कार्यक्षमता प्रदान करता है या क्या मुझे अपना स्वयं का सहायक कार्य लिखना चाहिए?

किसी भी मदद के लिए अग्रिम धन्यवाद।

उत्तर

21

SQLAlchemy uses the standard Python logging librarydb.log नाम की एक फ़ाइल के लिए क्वेरी को लॉग करने के लिए:

import logging 

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

अजगर लॉगिंग का उपयोग करते समय, सुनिश्चित करें कि सभी echo झंडे False की तैयारी में हैं, डुप्लिकेट प्रवेश से बचने के लिए।

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

कौन सा की तरह कुछ प्रवेश करेंगे:: अब डाटाबेस के लिए कुछ जोड़ने

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

यह सच है, लेकिन (क) यह भी stdout के लिए संदेश भेज सकते हैं, (ख) आप से एक समान प्रभाव सेट कर सकते हैं बस एक विशिष्ट इंजन की 'इको' विशेषता को सही पर सेट करें, और (सी) एसक्यूएलए की लॉगिंग प्लेसहोल्डर्स के साथ क्वेरी नहीं दिखाती है, हालांकि यह पैरामीटरयुक्त एसक्यूएल और पैरामीटर को अलग से लॉग करता है। –

+1

@ विनी वे अच्छे अंक हैं, मैंने अपने जवाब को अद्यतन किया है कि चित्र के लिए विशेष रूप से लॉग इन करने के लिए पाइथन लॉगिंग का उपयोग कैसे करें, और लॉगिंग आउटपुट – zeekay

+1

का एक उदाहरण दिखाएं, यह बहुत अच्छा है, और आपके पास पहले से ही मेरा अपवॉट था :-) –