SQL インジェクションからエスケープされるように、クエリ パラメータを名前付き辞書としてcursor.execute()
メソッドに渡したいと考えています。MySQLdb
なぜこれが得られるのか説明できますかKeyError
:
>>> c.execute('select id from users where username=%(user)s', {'user':'bob',})
KeyError: 'user'
MySQLdb マニュアルhttp://mysql-python.sourceforge.net/MySQLdb.htmlは次のように述べています。
パラメータスタイル
インターフェイスが期待するパラメーター マーカーの書式設定のタイプを示す文字列定数。
'format'
= ANSI C printf フォーマット コードに設定します'...WHERE name=%s'
。にマッピング オブジェクトが使用されている場合conn.execute()
、インターフェイスは実際に'pyformat'
= Python 拡張フォーマット コードを使用します'...WHERE name=%(name)s'
。ただし、API は現在、paramstyle で複数のスタイルを指定することを許可していません。