मेरे पास एक ORM वर्ग है जिसे पर्सन कहा जाता है, जो एक व्यक्ति तालिका के चारों ओर घूमता है:
Db आदि से संबंध स्थापित करने के बाद, मैं कथन चलाता हूं:
people = session.query(Person).all()
व्यक्ति तालिका में कोई डेटा नहीं है (अभी तक), इसलिए जब मैं चर प्रिंट करता हूं, तो people
मुझे एक खाली सूची मिलती है।
मैंने अपने ORM वर्ग में People
, people_foo
(जो मौजूद नहीं है) को संदर्भित तालिका का नाम बदल दिया ।
मैं फिर स्क्रिप्ट चलाता हूं। मुझे आश्चर्य हुआ कि जब कोई तालिका मौजूद नहीं होती है, तो पहुंचने के लिए कोई अपवाद नहीं रखा गया था।
इसलिए मेरे पास निम्नलिखित 2 प्रश्न हैं:
- मैं SQLAlchemy को कैसे सेटअप कर सकता हूं ताकि यह db त्रुटियों को स्क्रिप्ट में वापस प्रसारित करे?
- मैं db इंजन को भेजे जा रहे SQL को (यानी प्रिंट) कैसे देख सकता हूं?
यदि यह मदद करता है, तो मैं PostgreSQL का उपयोग कर रहा हूं।
[संपादित करें]
मैं एक पैकेज लिख रहा हूं। मेरी __main__.py
स्क्रिप्ट में, मेरे पास निम्न कोड है (यहाँ छोटा है):
### __main__.py
import common # imports logging and defines logging setup funcs etc
logger = logging.getLogger(__name__)
def main():
parser = OptionParser(usage="%prog [options] <commands>",
version="%prog 1.0")
commands = OptionGroup(parser, "commands")
parser.add_option(
"-l",
"--logfile",
dest="logfile",
metavar="FILE",
help="log to FILE. if not set, no logging will be done"
)
parser.add_option(
"--level",
dest="loglevel",
metavar="LOG LEVEL",
help="Debug level. if not set, level will default to low"
)
# Set defaults if not specified
if not options.loglevel:
loglevel = 1
else:
loglevel = options.loglevel
if not options.logfile:
logfilename = 'datafeed.log'
else:
logfilename = options.logfile
common.setup_logger(False, logfilename, loglevel)
# and so on ...
#### dbfuncs.py
import logging
# not sure how to 'bind' to the logger in __main__.py
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
engine = create_engine('postgres://postgres:pwd@localhost:port/dbname', echo=True)
[EDIT2]
सामान्य मॉड्यूल सही तरीके से लकड़हारा सेट करता है, और मैं अपने अन्य मॉड्यूल में लकड़हारा का उपयोग कर सकता हूं जो आम आयात करता है।
हालांकि dbfuncs
मॉड्यूल में, मुझे निम्नलिखित त्रुटि / चेतावनी मिल रही है:
लकड़हारा "sqlalchemy.engine.base.Engine" के लिए कोई हैंडलर नहीं मिला
common.setup_logger()
कॉल नहीं है (यह मानते हुए कि यह लॉगिंग को ठीक से कॉन्फ़िगर करना है)। साथ ही,echo=True
लॉगिंग का उपयोग करते समय आपको इसकी आवश्यकता नहीं है ।