首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么从sqlalchemy调用的存储过程不起作用,但从工作台调用却起作用?

为什么从sqlalchemy调用的存储过程不起作用,但从工作台调用却起作用?
EN

Stack Overflow用户
提问于 2019-11-22 12:53:13
回答 1查看 458关注 0票数 1

我有一个存储过程。

通过MySQL工作台调用,工作方式如下;

代码语言:javascript
运行
复制
CALL `lobdcapi`.`escalatelobalarm`('A0001');

但不是来自python程序。(意味着它没有抛出任何异常,进程静默地完成执行)如果我在列名中犯了任何错误,那么在python中我就会得到一个错误。所以它调用了我的存储过程,但没有按预期工作。(这是一个更新查询,.it需要安全更新)

为什么通过python sqlalchemy这个更新没有更新任何记录?

代码语言:javascript
运行
复制
CREATE DEFINER=`lob`@`%` PROCEDURE `escalatelobalarm`(IN client_id varchar(50))
BEGIN

 SET SQL_SAFE_UPDATES = 0;                                   
update lobdcapi.alarms
    set lobalarmescalated=1
where id in (

    SELECT al.id 
    from (select id,alarmoccurredhistoryid from lobdcapi.alarms where lobalarmpriorityid=1 and lobalarmescalated=0 and clientid=client_id 
            and alarmstatenumber='02' ) as al
    inner join lobdcapi.`alarmhistory` as hi on hi.id=al.alarmoccurredhistoryid
            and hi.datetimestamp<=  current_timestamp() )

);

SET SQL_SAFE_UPDATES = 1;

END

我叫它“喜欢”;

代码语言:javascript
运行
复制
from sqlalchemy import and_, func,text


db.session.execute(text("CALL escalatelobalarm(:param)"), {'param': clientid})

我怀疑我通过代码传递的参数没有正确绑定?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-22 13:41:35

我还没有从SQLAlchemy调用存储的procs,但这似乎可能是在一个事务中,因为您正在使用会话。也许最后调用db.session.commit()会有所帮助?

如果失败,SQLAlchemy会在这里调用calling stored procs。也许可以试试他们使用callproc的方法。适应你的用例,比如:

代码语言:javascript
运行
复制
connection = db.session.connection()
try:
    cursor = connection.cursor()
    cursor.callproc("escalatelobalarm", [clientid])
    results = list(cursor.fetchall())
    cursor.close()
    connection.commit()
finally:
    connection.close()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58987744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档