Python与SQLAlchemy:如何捕获to_sql报错的错误信息与SQL语句并写入日志
解决SQLAlchemy to_sql报错时记录错误原因和SQL语句的问题
你当前的代码错误在于直接输出了异常类而非捕获到的具体异常实例,所以无法获取包含错误原因和SQL语句的详细信息。需要修改except子句捕获异常对象,再通过该对象获取所需内容。
方法一:直接输出异常对象的字符串表示
SQLAlchemy的异常对象默认字符串已经包含了完整的错误栈、原始错误原因以及对应的SQL语句,和未捕获时控制台输出的内容一致。修改后的代码如下:
import logging import sqlalchemy.exc try: a.to_sql(name="lar", schema="lar", con=engine, if_exists="append", index=False) except sqlalchemy.exc.SQLAlchemyError as e: # 直接将异常对象传入logging.error,或转为字符串格式化输出 logging.error("执行to_sql失败: %s", str(e)) break
方法二:手动提取错误原因和SQL语句
如果需要更自定义的日志格式,可以通过异常对象的属性分别提取原始错误和SQL语句:
e.orig:获取底层数据库驱动抛出的原始错误对象e.statement:获取执行出错的SQL语句
示例代码:
import logging import sqlalchemy.exc try: a.to_sql(name="lar", schema="lar", con=engine, if_exists="append", index=False) except sqlalchemy.exc.SQLAlchemyError as e: error_detail = f"原始错误: {str(e.orig)}\n出错SQL: {e.statement}" logging.error("to_sql执行失败:\n%s", error_detail) break
注意:部分非执行类的SQLAlchemy异常(如连接错误)可能没有statement属性,但to_sql触发的错误通常是SQL执行错误,该属性会有效。
内容的提问来源于stack exchange,提问作者NocturnalOne
相关产品推荐
相关产品推荐

