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()
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()