Table 从 pyodbc Python 调用 SQL 服务器 SP 时被锁定

Table get locked when called an SQL Server SP from pyodbc Python

Table 从 pyodbc Python

调用 SQL 服务器 SP 时被锁定

我有一个 table 我为测试做的,叫做测试。我只是想看看我的代码是否有效。我的python代码很简单,只调用了一个SP

这是我的 SQL 服务器 SP 脚本:

ALTER PROCEDURE [dbo].[TestService]   
AS
BEGIN
    SET NOCOUNT ON;

    declare @C1 int
    
    BEGIN TRANSACTION;   
        insert into Test (a1) values ('Service')
    COMMIT TRANSACTION; 

    SELECT @C1 = COUNT(*) FROM test (nolock)    

    SELECT GETDATE(), @C1 as t
END

我的 python 代码是这样的:

import pyodbc 
import pandas as pd

#df_results.drop(axis=0, inplace=True)    

ConnectionString = "DRIVER={SQL Server};Server=Serv;Database=DB;User Id=user;Password=*****;"

conn = pyodbc.connect(ConnectionString)
df_results = pd.read_sql("EXEC TestService" , conn)
print(df_results)

在运行宁python代码之前我运行这个select

SELECT * FROM Test (NoLock) 

输出为 4 条记录

我 运行 python 脚本,我得到了这个输出

0 2021-12-19 00:09:36.887  5

表示已插入记录,记录总数为5

但是当我运行

SELECT * FROM Test (NoLock) 

我仍然只有4条记录

当我尝试时

SELECT * FROM Test

我超时了。

如何解决?

read_sql 不会提交事务。您需要明确提交它。

conn = pyodbc.connect(ConnectionString)
df_results = pd.read_sql("EXEC TestService" , conn)
print(df_results)
conn.commit()
conn.close()