带有“IF NOT EXISTS”的原始SQL不会执行

时间:2013-10-10 22:43:22

标签: sql-server-2008 sqlalchemy pymssql

这是我的python代码。似乎如果原始SQL包含IF NOT EXISTS,sqlalchemy将不会执行它。也没有例外。

db.execute(text(
    """
    IF NOT EXISTS ( select 1 from agent_assignment where exception_id = :exception_id )
    BEGIN
        insert into agent_assignment(exception_id, [user], work_status, insert_date, insert_user)
        values (:exception_id, :user, 'pending', :date, :insert_update_user)
    END
    ELSE
        update agent_assignment
        set 
            [user] = :user,
            update_date = :date,
            update_user = :insert_update_user
        where exception_id =  :exception_id
    """),
    exception_id = exception_id, 
    user = assignee,
    date = datetime.now(),
    insert_update_user = insert_update_user
)

如果删除IF..ELSE部分,SQL将正确执行。所以我从技术上讲,在IF..ELSEEXISTS作为声明的一部分的情况下执行原始SQL是不可能的?

运行原始SQL的正确方法是什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我需要在脚本末尾添加COMMIt,因为查询有点复杂,并且sqlalchemy不能自动提交它。