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'])は動作しますか? –
@Ross Bushはもう役に立たないようにしました – Muposat