我是 SQL 2000 的 Microsoft SQL VIEW 最终用户。
到目前为止,我正在使用 Excel Microsoft Query 来获取数据。可以正常使用。
我决定改进我的工作并重新安排使用此视图的工作。
我编写了 python 脚本,该脚本应该获取数据、进行一些计算、导出到 Excel 并将其发送给许多收件人。 但是 python 脚本在获取数据时出现问题,显示错误:
无法执行该操作,因为 OLE DB 提供程序“SQLOLEDB”无法开始分布式事务。 (7391) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server][OLE/DB 提供程序返回消息:新事务无法在指定的事务协调器中登记。 ](7312); [42000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]OLE DB 错误跟踪 [OLE/DB 提供程序“SQLOLEDB”ITransactionJoin::JoinTransaction 返回 0x8004d00a]。 (7300)`
Excel 连接工作正常,只是 python 脚本不起作用。
Python 脚本非常简单,并且可以与放置在该服务器上的其他视图一起使用。
connectionString = f'DRIVER={{SQL Server}};SERVER={SERVER};DATABASE={DATABASE};UID={USERNAME};PWD={PASSWORD};WSID={WSID};APP={APP}'
conn=pyodbc.connect(connectionString)
sql = 'SELECT * FROM VIEW_DATA'
conn_cursor=conn.cursor()
cursor.execute(sql)
sql_data = cursor.fetchall()
也许有人有类似的问题并解决了?
Excel 可以工作,但 python 不行,这让我抓狂。
作为@siggemannen
在创建连接时尝试使用 autocommit=True 。只是一个猜测,但也许 pyodbc 启动了一些 sql server 2000 不喜欢的事务。