如何使用Python/SQLAlchemy和MSSQL在一个SQL中执行多个insert/update查询?

2024-10-01 13:46:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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

我的问题

  • 我是否使用正确的方法来执行查询?在
  • 如果我的代码没问题,如何从 Python?在

Tags: testnumberagesqltablenotintinsert