sqlalchemy:This result object does not return rows. It has been closed automatically.

在使用sqlalchemy和pandas查询数据库结果时,总是出现错误“This result object does not return rows. It has been closed automatically.”

尝试将sqlalchemy的版本更新到最新或者降级到1.3,都无法解决这个问题。怀疑是SQL语句有问题,经过重复调试SQL脚本,发现有2个问题:

1.使用了USE语句切换数据库。

2.使用了SELECT INFO语句创建临时表

由于SQLAlchemy 的 create_engine() 函数用于创建一个引擎(Engine),这个引擎会连接到特定的数据库(通过连接字符串中的数据库名称或其他参数),不能直接使用 SQL 的 USE 语句来切换数据库。

SQLAlchemy本身并不直接支持SQL中的SELECT INTO语句作为其核心功能,需要通过一些自定义和扩展才能实现SELECT INTO的功能,所以这里需要使用CTE语句。

解决方案:将USE语句注释掉或删除;使用CTE替代SELECT INFO

另外,如果确实需要切换数据库(在支持多个数据库的 SQL Server 实例中),可能需要:

  1. 创建一个新的连接字符串,指向不同的数据库。
  2. 使用这个新的连接字符串创建一个新的引擎。
  3. 使用这个新的引擎来执行你的查询。

但请记住,这种方法可能会导致更多的资源消耗,因为每个数据库连接都需要一个独立的引擎。在大多数情况下,最好是在应用程序开始时确定需要连接的数据库,并在整个应用程序生命周期中保持这个连接。如果需要在不同的数据库之间切换,可能需要重新考虑应用程序架构或数据库设计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值