似乎并不像SqlAlchemy支持调用存储过程。有没有人找到解决这个适用于SQL Server的解决方法?从SqlAlchemy调用MSSQL存储过程
示例过程:
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:[email protected]/db?driver=SQL Server', echo=True)
engine.execute("list_lock_set ?, ?", ['bbc', 'sqlalchemy'])
谢谢。
编辑:看来最好的解决方案是从发动机捞出pyodbc光标:
cursor = engine.raw_connection().cursor()
cursor.execute("list_lock_set ?, ?", ['bbc', 'using cursor'])
cursor.commit()
我也能获得pyodbc连接:
engine.raw_connection().connection
,并设置autocommit=True
,但可能会干扰引擎逻辑。非常感谢@Batman。
dbc.execute(“EXEC list_lock_set?,?”,['bbc','pyodbc'])是否工作? –
@罗斯布什只是试了一遍无效 – Muposat