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

SQLAlchemy+PyODBC连SQL Server遇SQLEndTran错误,求排查引擎配置问题

解决方案

1. 调整事务隔离级别为自动提交

SQLAlchemy默认会开启隐式事务,若你的数据库环境不支持这种处理逻辑,就会出现事务结束时找不到对应事务的错误。可以在创建引擎时指定自动提交模式:

import pandas as pd
import sqlalchemy
from sqlalchemy.engine import URL

driver='ODBC Driver 17 for SQL Server'
server='MyServer'
database='MyDB'
username = 'MyUser'
password = 'MyPWD'

connection_string = f'DRIVER={driver};SERVER={server};PORT=17001;DATABASE={database};UID={username};PWD={password}'
engine = sqlalchemy.create_engine(
    URL.create("mssql+pyodbc", query={"odbc_connect": connection_string}),
    isolation_level="AUTOCOMMIT"
)

pd.read_sql(sql=Query, con=engine)

2. 修正服务器地址的端口写法

SQL Server的ODBC连接字符串中,端口通常与服务器地址合并书写,格式为SERVER=服务器地址,端口,而非单独使用PORT参数。修改连接字符串后重试:

connection_string = f'DRIVER={driver};SERVER={server},17001;DATABASE={database};UID={username};PWD={password}'
engine = sqlalchemy.create_engine(URL.create("mssql+pyodbc", query={"odbc_connect": connection_string}))

3. 直接使用SQLAlchemy原生URL格式创建引擎

跳过构造pyodbc连接字符串的步骤,直接用SQLAlchemy的URL规则生成引擎:

engine_url = f"mssql+pyodbc://{username}:{password}@{server}:17001/{database}?driver={driver.replace(' ', '+')}"
engine = sqlalchemy.create_engine(engine_url)

注意需将驱动名称中的空格替换为+,符合URL编码要求。

4. 检查并升级依赖库版本

旧版本的SQLAlchemy或pyodbc可能存在事务处理的兼容性bug,尝试升级两个库:

pip install --upgrade sqlalchemy pyodbc

内容的提问来源于stack exchange,提问作者Yona

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:22:43