我是python和SQLAlchemy的新手,我试图理解如何使用python/SQLAlchemy在一个SQL中执行多个insert/update查询:
要求 在一个SQL中执行多个插入/更新:
DECLARE @age INT = 160
INSERT INTO TEST_TABLE VALUES ('QZ_TEST', @age + 1)
INSERT INTO TEST_TABLE VALUES ('QZ_TEST', 'not a number')
INSERT INTO ANOTHER_TABLE VALUES ('QZ_TEST', @age + 2)
要知道这个查询看起来很难看,但是我们确实有很多类似的查询。(我们使用的是一个大约有20年历史的遗留数据库)
Python代码
^{pr2}$请注意
INSERT INTO TEST_TABLE VALUES ('QZ_TEST', 'not a number')
如果使用SQL客户端运行此查询,将触发错误: [s001][245]将varchar值“not a number”转换为数据类型int时,转换失败
我希望Python捕捉到异常,但是,Python代码运行时没有任何异常。即使我用替换了SQL,Python也没有捕捉到异常:
BEGIN TRY
DECLARE @age INT = 160
INSERT INTO TEST_TABLE VALUES ('QZ_TEST', @age + 1)
INSERT INTO TEST_TABLE VALUES ('QZ_TEST', 'not a number')
INSERT INTO ANOTHER_TABLE VALUES ('QZ_TEST', @age + 2)
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000)
DECLARE @ErrorSeverity INT
DECLARE @ErrorState INT
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE()
RAISERROR (@ErrorMessage,
@ErrorSeverity, -- Level 16
@ErrorState
)
END CATCH
我的问题
execute
命令在准备语句时可能遇到问题,因为它实际上是多个语句。对于您正在尝试的操作,我相信您可能需要看看executemany
:https://github.com/mkleehammer/pyodbc/wiki/Cursor#executemanysql-paras
它采用不同的形式,并将插入值绑定为列表中的元组。在
祝你好运!在
相关问题 更多 >
编程相关推荐