Python+MySQLでストアドプロシージャの実行
ストアドプロシージャを作成。下記はサンプル。
CREATE DEFINER=`DBユーザ名`@`%` PROCEDURE `ストアドプロシージャ名`(IN _dateStr VARCHAR(12)) BEGIN # Variables DECLARE done INT; DECLARE _stockCode INT; DECLARE selectCount INT; # Cursor DECLARE sampleCur CURSOR FOR (SELECT文を記述); SET done = 1; OPEN sampleCur; #先ほど定義したCursorのOpen WHILE done DO FETCH sampleCur INTO _stockCode; SELECT count(*) INTO selectCount #select実行結果を変数selectCountへ代入 FROM table1 WHERE code=_stockCode ; IF 0<selectCount THEN (SELECT文記述); END IF; END WHILE; CLOSE sampleCur; END
久しぶりにストアドプロシージャ書いたが完全に忘れておる。
・最初のCREATE DEFINERはmysqlワークベンチで自動生成される。
・変数宣言は、DECLARE。
・Cursorの定義は、DECLARE カーソル名 CURSOR FOR (SQL文)
・OPENでカーソルを開いて、FETCHで実行
ストアドプロシージャを作成したらpythonからの呼び出し。
SQLAlchemyを使用しているので、今回はそれからの呼び出し方法。
#raw_connectionの取得 engine = dbMapper.create_engine(url, echo=False) connection = engine.raw_connection() # Query実行 cursor = connection.cursor() cursor.callproc("ストアドプロシージャ名", [startDate]) results = list(cursor.fetchall()) cursor.close() connection.commit()
raw_connectionを使用する。
これで実行はできた。
ただ、2件返却されるはずなのが1件だけなので、これは別途調べておくとして、とりあえず、実行までの流れはこんな感じ。