Python 使用pyodbc执行SQL while循环

Python 使用pyodbc执行SQL while循环,python,sql-server,pyodbc,Python,Sql Server,Pyodbc,我编写了一个相当简单的SQLWhile循环,并试图通过pyodbc游标提交它。但它没有工作,而在SQLServerManagementStudio中工作得非常好 我的理解是,不能用游标传递多个语句。但是,如何执行SQLWhile循环呢?我知道我可以通过cursor.rowcount在python中使用while循环执行以下查询,但我的问题是关于使用各种SQL函数(如while here)的通用查询 尝试在提交事务后测试行计数条件;陈述以下是我的作品 导入pyodbc conn=pyodbc.co

我编写了一个相当简单的SQLWhile循环,并试图通过pyodbc游标提交它。但它没有工作,而在SQLServerManagementStudio中工作得非常好

我的理解是,不能用游标传递多个语句。但是,如何执行SQLWhile循环呢?我知道我可以通过cursor.rowcount在python中使用while循环执行以下查询,但我的问题是关于使用各种SQL函数(如while here)的通用查询


尝试在提交事务后测试行计数条件;陈述以下是我的作品

导入pyodbc conn=pyodbc.connect 自动提交=错误, driver=/usr/local/lib/libtdsodbc.so, tds_版本=7.4, 数据库=堆栈溢出, 端口=。。。, 服务器=。。。, 用户=。。。, 密码=。。。 query1=删除表(如果存在)dbo.DeleteExample; 游标1=连接游标 游标1.executequery1 cursor1.commit 游标1.close 查询2= 选择“2020-08-23”作为日期作为报告日期 进入dbo.DeleteExample 从sys.objects a到sys.objects b 游标2=连接游标 游标2.executequery2 大约10000行,具体取决于您的数据库 printcursor2.rowcount,插入的行数 cursor2.commit 游标2.close 查询3= 声明@rowcountint; 而1=1 开始 开始事务t1; 删除前2000名 来自dbo.DeleteExample 其中报告日期='2020-08-23'; 设置@RowCount=@@RowCount; 提交事务t1; 如果@RowCount<1,则中断; 终止 游标3=连接游标 游标3.executequery3 2000,这只是第一次行计数。。。 printcursor3.rowcount,已删除行 cursor3.commit 游标3.close 哪个输出

%python./example.py 10609,“插入行” 2000,“删除行”
在SSMS中执行StackOverflow.dbo.DeleteExample中的select count1将返回一个0的计数。

这是什么意思?您收到了什么错误消息?另外,为什么要使用conn.autocommit=True和cursor.commit?选择一个或另一个。@Always学习它只会删除第一次,它不会执行循环。我可以看出,并不是所有的文件都被删除了,这有什么疑问呢?您是否打算在该日期删除该表中的所有行?如果是,为什么要循环?
conn = get_output_conn(env=ENVIRONMENT)
conn.autocommit=True
cursor = conn.cursor()
query = """WHILE 1 = 1
                BEGIN
                BEGIN TRANSACTION;
                   DELETE TOP(2000)
                   FROM table with(holdlock)
                   WHERE ReportDate = '2020-08-23';
                   IF @@ROWCOUNT < 1 BREAK;
                COMMIT TRANSACTION;
                END"""
cursor.execute(query)
cursor.commit()