You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas与SQLAlchemy读取MS Access查询返回空DataFrame求助

解决Access查询返回空DataFrame的问题

以下是针对你遇到问题的排查和解决步骤:

1. 先确认数据是否存在匹配结果

直接在MS Access软件中运行你的查询语句,查看是否能得到返回结果:

  • 如果Access里也返回空,说明是查询条件筛选后没有匹配的数据,需要调整条件逻辑;
  • 如果Access里有结果,问题则出在Python连接时的SQL语法兼容上。

2. 修正LIKE通配符(核心问题)

你的连接字符串中设置了ExtendedAnsiSQL=1,这会让Access ODBC驱动启用ANSI SQL标准的通配符规则:

  • 用%代替Access默认的*作为多字符通配符
  • 用_代替Access默认的?作为单字符通配符

而你的查询里仍在使用*,还添加了不必要的转义\*,这会导致条件匹配失败,最终返回空DataFrame。修改后的查询语句如下:

RAFAELquery= '''
SELECT SAP_CONSO.Cofor6, SAP_CONSO.TypePce, SAP_CONSO.Ste, Count(SAP_CONSO.Nfact) AS CompteDeNfact 
FROM SAP_CONSO 
GROUP BY SAP_CONSO.Cofor6, SAP_CONSO.TypePce, SAP_CONSO.Ste, SAP_CONSO.SaiParFlux 
HAVING (SAP_CONSO.TypePce Not Like 'y%') AND (SAP_CONSO.SaiParFlux Like '%E') 
ORDER BY SAP_CONSO.TypePce DESC;
'''

3. 验证基础连接与数据读取

如果修改后仍然返回空,可以先执行一个简单查询验证连接和数据读取是否正常:

df_test = pd.read_sql_query("SELECT TOP 10 * FROM SAP_CONSO", engine)
print(df_test)
  • 若该查询能返回数据,说明连接正常,继续调整分组查询的条件逻辑;
  • 若仍为空,需检查表名拼写(注意大小写、特殊字符)、数据库文件路径是否正确。

4. 检查GROUP BY子句的合理性

你的GROUP BY包含了SAP_CONSO.SaiParFlux,但SELECT中并未包含该字段。虽然语法上允许,但如果该字段的不同取值导致分组后没有符合HAVING条件的组合,也会返回空结果。可以尝试:

  • 若业务逻辑允许,去掉GROUP BY中的SAP_CONSO.SaiParFlux;
  • 单独查询SAP_CONSO.SaiParFlux字段,确认存在符合Like '%E'的值。

内容的提问来源于stack exchange,提问作者Stéphanie Ricardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:01:07