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件だけなので、これは別途調べておくとして、とりあえず、実行までの流れはこんな感じ。