Pyodbc无法启用MARS,即使SQL原生客户端显示‘MARS: yes’
解决Pyodbc连接SQL Server时MARS未生效的问题
别依赖DSN的MARS配置,直接在连接字符串里明确指定参数才靠谱,Windows环境下
MARS_Connection=Yes完全有效,把你的连接代码改成这样试试:cnxn = pyodbc.connect(DSN="83something", UID="something", PWD="something", MARS_Connection="Yes")或者干脆不用DSN,写完整的连接字符串避免歧义:
cnxn = pyodbc.connect( "DRIVER={ODBC Driver 17 for SQL Server};" "SERVER=你的服务器地址;" "DATABASE=目标数据库;" "UID=something;" "PWD=something;" "MARS_Connection=Yes" )检查pyodbc版本,确保是4.0.30及以上的新版本,旧版本可能对MARS参数支持有问题。可以用
pip show pyodbc查看版本,不够的话用pip install --upgrade pyodbc升级。别纠结
SQL_MAX_CONCURRENT_ACTIVITIES返回1的问题,有时候这个值的返回可能和驱动实现有关,最直接的测试方式是跑实际并发操作:比如打开两个游标同时执行查询,如果MARS没启用会报错“连接忙”,能正常执行就说明MARS已经生效。示例测试代码:cnxn = pyodbc.connect(...) # 带MARS参数的连接 cursor1 = cnxn.cursor() cursor2 = cnxn.cursor() cursor1.execute("SELECT * FROM 你的表") print(cursor1.fetchone()) cursor2.execute("SELECT * FROM 另一个表") print(cursor2.fetchone())尽量用ODBC Driver 17 for SQL Server,原生客户端11.0虽支持MARS,但微软已停止更新维护,新版驱动在MARS兼容性上表现更好。
内容的提问来源于stack exchange,提问作者clarence zhao
相关产品推荐
相关产品推荐

