sqlalchemy.create_engine()用pypyodbc连接MS SQL报错咨询
pypyodbc驱动连接SQLAlchemy写入SQL Server配置方法
核心调整点共2处,改完即可正常运行:
- 移除
create_engine里的fast_executemany=True参数:这个参数是pyodbc驱动专属的批量写入优化参数,pypyodbc的DBAPI层没有对应实现,保留会直接抛出参数不兼容错误。 - 确认连接串格式适配pypyodbc方言,不要直接套用pyodbc的传参逻辑,正确实现代码如下:
import urllib.parse from sqlalchemy import create_engine from sqlalchemy.pool import NullPool # 替换为你自己的原始ODBC连接信息 ConnectionString = "DRIVER={你的本机已安装的SQL Server ODBC驱动名};SERVER=你的SQL Server地址;DATABASE=目标库名;UID=登录账号;PWD=登录密码;Encrypt=yes;TrustServerCertificate=no" sqlchemyparams = urllib.parse.quote_plus(ConnectionString) # pypyodbc连接串格式和pyodbc路径前缀一致,注意不要拼错驱动名 sqlchemy_conn_str = f'mssql+pypyodbc:///?odbc_connect={sqlchemyparams}' engine_azure = create_engine( sqlchemy_conn_str, echo=True, poolclass=NullPool ) # to_sql调用逻辑不需要修改 df_top_features.to_sql('Topdata', engine_azure, schema='dbo', index=False, if_exists='replace')
如果上述连接串格式报错,可以改用显式传参的写法,不需要提前拼接完整ODBC串:
# 按实际值替换大括号内的内容即可 sqlchemy_conn_str = "mssql+pypyodbc://{UID}:{PWD}@{SERVER}:{PORT}/{DATABASE}?driver={url编码后的驱动名}&Encrypt=yes&TrustServerCertificate=no"
排查提示:如果提示驱动不存在,在本地Python环境执行
import pypyodbc; print(pypyodbc.drivers()),打印出的列表里找名称包含SQL Server的驱动,把名称完全匹配填入连接串的driver字段即可。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

