gpt4 book ai didi

pyodbc 和插入语句

转载 作者:行者123 更新时间:2023-12-03 04:24:17 25 4
gpt4 key购买 nike

我使用 pyodbc 的时间很短,现在面临着从文件中应用 sql 脚本来执行一些 View 创建的问题。为了应用 sql 文件,我使用另一个线程中的示例 - Follow up: Execute .sql files from python我的大多数 sql 脚本都没有问题,但这个会导致问题:

脚本部分:

insert into TMP_VIEWS select * from TMP_QUERY_SQL
go
begin
declare @SQL_CMD varchar(4000);
declare @CNT int;
set @CNT = (select count(1) from TMP_VIEWS);
while @CNT > 0
begin
set @SQL_CMD = (select top 1 SQL_CMD from TMP_VIEWS order by SQL_CMD);
print 'Executing: ' + @SQL_CMD;
EXEC(@SQL_CMD)
delete from TMP_VIEWS where @SQL_CMD = SQL_CMD;
set @CNT = (select count(1) from TMP_VIEWS);
end
end

如您所见,它执行从另一个表插入到表中的 SQL 语句。所以按照我的应用方式,它不起作用。来自另一个线程的示例将 sql 文件划分为 GO 之间的 block 并应用它们。因此,“insert into TMP_VIEWS select * from TMP_QUERY_SQL”单独应用,然后再应用其他部分。看起来 pyodbc 或驱动程序实际上并不等待服务器上插入的完全执行,而是在实际插入完成之前执行第二个 block 。因此,我创建了相当随机数量的 View ,并且 TMP_VIEWS 中保留了非具体查询。我有自动提交并尝试在查询执行后添加额外的提交 - 这没有帮助。唯一有帮助的 - 在 GO 之间执行此批处理之间添加 time.sleep(0.2) 。看起来像是一些异步调用。谁面临同样的问题或者我的尝试可能出了什么问题?可能有一些解决方法吗?

谢谢!

最佳答案

如果您只需要此特定脚本的解决方案,请执行以下操作:将 TMP_QUERY_SQL 表中的所有 SQL 语句读取到 Python 列表中。然后在迭代列表时对每个语句调用 excecute,并避免对临时 SQL 表 TMP_VIEWS 的任何依赖。

关于pyodbc 和插入语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12403789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com