1. ホーム
  2. python

[解決済み] MySQLのパラメータ化されたクエリ

2023-05-28 20:11:40

質問

MySQLdb モジュールを使用してデータベースに情報を挿入するのに苦労しています。 私は 6 つの変数をテーブルに挿入する必要があります。

cursor.execute ("""
    INSERT INTO Songs (SongName, SongArtist, SongAlbum, SongGenre, SongLength, SongLocation)
    VALUES
        (var1, var2, var3, var4, var5, var6)

""")

誰かここの構文について教えてください。

どのように解決するには?

SQL クエリに文字列補間を使用すると、入力パラメータが正しくエスケープされず、アプリケーションが SQL インジェクションの脆弱性を受ける可能性があるため、注意が必要です。 この違いは些細なことのように思えるかもしれませんが、実際には大きなものです .

不正解(セキュリティ上の問題あり)

c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))

正しい(エスケープあり)

c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))

SQL 文のパラメータを結合するために使用される修飾子が異なる DB API 実装間で異なること、また、mysql クライアントライブラリが printf スタイルの構文が使用されていること、そして、より一般的に受け入れられている '? python-sqlite ).