【发布时间】:2022-01-21 07:43:57
【问题描述】:
从 pyodbc Python 调用 SQL Server SP 时表被锁定
我有一张用于测试的表,名为 test。我只是想看看我的代码是否有效。我的python代码很简单,只调用一个SP
这是我的 SQL Server 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 * FROM Test (NoLock)
输出是 4 条记录
我运行了 python 脚本,得到了这个输出
0 2021-12-19 00:09:36.887 5
表示记录已插入,记录总数为5
但是当我运行时
SELECT * FROM Test (NoLock)
我仍然只得到 4 条记录
当我尝试时
SELECT * FROM Test
我超时了。
如何解决?
【问题讨论】:
-
如何输出开头有“0”?显示的代码不会产生多余的 0?
-
0 为索引(python 中第一行为 0)
-
@MitchWheat Transaction 试图找出锁定的原因。但它并不是真正需要的
-
" 但它并不是真正需要的" - 是的,我知道!
-
我想问你为什么使用 read_sql() 来执行存储过程! “将 SQL 查询或数据库表读入 DataFrame。” - pandas.pydata.org/docs/reference/api/pandas.read_sql.html
标签: python sql sql-server tsql odbc