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)
この記事へのコメント