python – 从SqlAlchemy调用MSSQL存储过程

前端之家收集整理的这篇文章主要介绍了python – 从SqlAlchemy调用MSSQL存储过程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

看起来sqlAlchemy似乎不支持调用存储过程.有没有人找到适用于sql Server的解决方法

样品程序:

CREATE PROCEDURE list_lock_set @name varchar (5),@requester varchar(30)
AS
BEGIN
    SET NOCOUNT ON;
    INSERT INTO list_lock (name,requester,acquired) values (@name,@requester,GETDATE())
    RETURN 0    
END
GO

这有效:

import pyodbc
dbh = pyodbc.connect(driver=''{sql Server}'',server=srv,database=db,uid=uid,pwd=pwd)
dbc = dbh.cursor()
dbc.execute("list_lock_set ?,?",['bbc','pyodbc'])
dbc.commit()

这不会产生错误,但也不起作用:

from sqlalchemy import create_engine
engine = create_engine('mssql+pyodbc://usr:passw@srv/db?driver=sql Server',echo=True)
engine.execute("list_lock_set ?,'sqlalchemy'])

谢谢.

编辑:似乎最好的解决方案是从引擎中删除pyodbc游标:

cursor = engine.raw_connection().cursor()
cursor.execute("list_lock_set ?,'using cursor'])
cursor.commit()

我也可以获得pyodbc连接:

engine.raw_connection().connection

并设置autocommit = True,但这可能会干扰引擎逻辑.非常感谢@Batman.

最佳答案
我记得这也让我感到悲伤.从内存中session_namecute()或connection.execute()为我工作.还有一个callproc()方法,这可能是正确的方法. http://docs.sqlalchemy.org/en/latest/core/connections.html

此外,我在MSsql过去遇到了一些问题,这似乎是由于在程序完成之前方法返回的异步事件,导致数据库出现不可预测的结果.我发现在调用之后立即设置time.sleep(1)(或任何适当的数字).

原文链接:https://www.f2er.com/python/438647.html

猜你在找的Python相关文章