Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 如何记录sqlalchemy中返回的SQL语句和行以帮助调试?_Debugging_Logging_Sqlalchemy - Fatal编程技术网

Debugging 如何记录sqlalchemy中返回的SQL语句和行以帮助调试?

Debugging 如何记录sqlalchemy中返回的SQL语句和行以帮助调试?,debugging,logging,sqlalchemy,Debugging,Logging,Sqlalchemy,如何配置sqlalchemy来记录它向数据库服务器发出的SQL语句,并记录从这些语句返回的行?这对于调试非常有用。选项1:将sqlalchemy.engine记录器日志级别设置为logging.INFO或logging.DEBUG: e、 g 参考: 选项2:调用sqlalchemy.create_engine(): e、 g *sqlalchemy.创建引擎(*args,**kwargs) … echo=False–如果为True,引擎将把所有语句及其参数列表的repr()记录到引擎记录器中

如何配置
sqlalchemy
来记录它向数据库服务器发出的SQL语句,并记录从这些语句返回的行?这对于调试非常有用。

选项1:将
sqlalchemy.engine
记录器日志级别设置为
logging.INFO
logging.DEBUG
e、 g

参考:

选项2:调用
sqlalchemy.create_engine()

e、 g

*sqlalchemy.创建引擎(*args,**kwargs)

echo=False–如果为True,引擎将把所有语句及其参数列表的repr()记录到引擎记录器中,该记录器默认为sys.stdout。可以随时修改引擎的echo属性以打开和关闭日志记录。如果设置为字符串“debug”,结果行也将打印到标准输出


似乎人们在文档中很难找到这一点,但您也可以完全自定义日志运行方式。谢谢@zzzeek!我现在在答案中加上了这一点。
>>> import logging
>>> logging.basicConfig()
>>> logger = logging.getLogger('sqlalchemy.engine')
>>> logger.setLevel(logging.DEBUG)
>>> session.query(User).all()
2015-01-02 11:54:25,854 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2015-01-02 11:54:25,856 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name
FROM users
2015-01-02 11:54:25,857 INFO sqlalchemy.engine.base.Engine {}
2015-01-02 11:54:25,858 DEBUG sqlalchemy.engine.base.Engine Col ('users_id', 'users_name')
2015-01-02 11:54:25,860 DEBUG sqlalchemy.engine.base.Engine Row (1, u'Alice')
2015-01-02 11:54:25,860 DEBUG sqlalchemy.engine.base.Engine Row (2, u'Bob')
>>> from sqlalchemy import create_engine
>>> from sqlalchemy.orm import sessionmaker
>>> engine = create_engine('postgres://postgres_user:my_password@localhost/my_db',
...                        echo="debug")
>>> Session = sessionmaker(bind=engine)
>>> session = Session()
>>> users = session.query(User).all()
2015-01-02 11:54:25,854 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2015-01-02 11:54:25,856 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name
FROM users
2015-01-02 11:54:25,857 INFO sqlalchemy.engine.base.Engine {}
2015-01-02 11:54:25,858 DEBUG sqlalchemy.engine.base.Engine Col ('users_id', 'users_name')
2015-01-02 11:54:25,860 DEBUG sqlalchemy.engine.base.Engine Row (1, u'Alice')
2015-01-02 11:54:25,860 DEBUG sqlalchemy.engine.base.Engine Row (2, u'Bob')