如何消除Pandas+pyodbc运行时的SQLAlchemy支持警告?
问题描述
在Anaconda环境(Spyder 4,Python 3.8.8,IPython 7.22.0)中运行以下脚本时一切正常无警告(设备为内网离线环境,管理员每3-4个月更新一次Anaconda)。但同一设备上以计划任务形式使用Python 3.9.5运行时,会弹出警告:
"UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy."
同时任务计划程序报告启动错误,尽管脚本最终能正常运行并发送结果邮件。需要消除该警告,解决任务计划程序的启动错误问题。
相关代码
import pandas as pd import pyodbc import requests as rq conn = pyodbc.connect("Driver={SQL Server};" "Server=Servername;" "Database=AVR;" "Trusted_Connection=yes;") df_kontrola = pd.read_sql_query("select ........'",conn) conn.close() del conn .... send email ....
解决方法
方法1:改用SQLAlchemy连接(推荐)
pandas高版本对非SQLAlchemy的DBAPI2连接不再提供官方支持,改用SQLAlchemy引擎连接可彻底消除警告。步骤如下:
- 联系管理员在离线环境部署
sqlalchemy包 - 修改代码为SQLAlchemy连接方式:
import pandas as pd from sqlalchemy import create_engine import requests as rq # 构建SQLAlchemy连接字符串 conn_str = "mssql+pyodbc://Servername/AVR?driver=SQL+Server&Trusted_Connection=yes" engine = create_engine(conn_str) # 使用引擎执行查询 df_kontrola = pd.read_sql_query("select ........'", engine) # 关闭引擎连接 engine.dispose() .... send email ....
方法2:临时屏蔽警告(应急方案)
如果暂时无法部署SQLAlchemy,可在脚本开头添加代码屏蔽该特定警告:
import warnings import pandas as pd import pyodbc import requests as rq # 屏蔽pandas的DBAPI2连接警告 warnings.filterwarnings("ignore", category=UserWarning, message="pandas only supports SQLAlchemy connectable.*") conn = pyodbc.connect("Driver={SQL Server};" "Server=Servername;" "Database=AVR;" "Trusted_Connection=yes;") df_kontrola = pd.read_sql_query("select ........'",conn) conn.close() del conn .... send email ....
任务计划程序启动错误说明
任务计划程序的启动错误大概率是因为警告信息被识别为错误输出。解决警告后,该错误通常会自动消失。若仍存在,检查:
- 计划任务指向的Python 3.9.5可执行文件路径是否正确
- 任务的工作目录是否设置正确
- 执行任务的账号是否有足够权限访问相关资源
内容的提问来源于stack exchange,提问作者P.D.
相关产品推荐
相关产品推荐

