MySQL の PREPARE 文

MySQLは、SQL文レベルでプリペアドステートメントをサポートしているらしい。

https://dev.mysql.com/doc/refman/8.0/ja/sql-prepared-statements.html

恥ずかしながら、全然知らなかった。

mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
mysql> SET @a = 3;
mysql> SET @b = 4;
mysql> EXECUTE stmt1 USING @a, @b;

という感じで SQL文を実行できる。(stmt1 は任意の名前)

最後に

mysql> DEALLOCATE PREPARE stmt1;

を実行すると、プリペアードステートメントが解放される。


Python でこんなコード書いても動いた。

import cymysql

connect = cymysql.connect(
host="hostname",
user="root",
passwd="password",
db="database_name",
)
cur = connect.cursor()
cur.execute("prepare stmt1 from 'select * from information_schema.TABLES where table_name=?'")
cur.execute("set @a='user'")
cur.execute("execute stmt1 using @a")
for r in cur.fetchall():
print(r)

この記事へのコメント