如何在SqlModel中记录及查看发送至数据库的SQL查询?
在SqlModel中记录并查看SQL查询语句
SqlModel基于SQLAlchemy,因此可以通过以下几种方式记录和查看发送到数据库的SQL查询:
方式一:启用引擎的echo模式(快速调试)
创建数据库引擎时添加echo=True参数,引擎会自动将所有执行的SQL语句(包括参数、事务操作)打印到控制台,适合开发阶段快速排查问题。
示例代码:
from sqlmodel import create_engine, SQLModel, Session # 启用echo模式查看SQL engine = create_engine("sqlite:///your-db.db", echo=True) SQLModel.metadata.create_all(engine) with Session(engine) as session: # 执行任意数据库操作,比如查询、新增 # user = User(name="Alice") # session.add(user) # session.commit() pass
方式二:通过Python日志系统精细控制
如果需要更灵活的日志管理(比如输出到文件、控制日志级别),可以配置Python的logging模块,针对sqlalchemy.engine日志器设置级别:
- 设置
INFO级别会输出执行的SQL语句; - 设置
DEBUG级别会额外输出参数绑定的具体值,更适合调试参数问题。
示例代码:
import logging from sqlmodel import create_engine, SQLModel, Session # 配置日志基础设置 logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) # 开启SQLAlchemy引擎的日志 logging.getLogger("sqlalchemy.engine").setLevel(logging.INFO) engine = create_engine("sqlite:///your-db.db") SQLModel.metadata.create_all(engine) with Session(engine) as session: # 执行数据库操作 pass
实用提示
- 生产环境建议关闭
echo=True,避免输出敏感信息或占用过多资源,改用日志系统按需记录。 - 如果需要过滤特定类型的日志,可以通过日志器的过滤器进一步调整,比如只记录查询语句,忽略事务操作。
内容的提问来源于stack exchange,提问作者Atilla Ozgur
相关产品推荐
相关产品推荐

