SQLiteのパラメータ置換問題
2023-10-09 20:13:52
質問
Python 2.5でSQLite3を使用して、リストを反復処理し、項目の名前に基づいてデータベースから項目の重さを引き出そうとしています。
SQLインジェクションを防ぐために提案された"?" パラメータ置換を使おうとしましたが、うまくいきません。たとえば、私が使用するとき。
for item in self.inventory_names:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", item)
self.cursor.close()
エラーが出ます。
sqlite3.ProgrammingError: 提供されたバインディングの数が正しくありません。現在の文は1を使用していますが、8が供給されています。
これはデータベースの初期作成に何らかの原因があると思います。実際にDBを作成する私が作ったモジュールでは、8つのバインディングがあります。
cursor.execute("""CREATE TABLE Equipment
(id INTEGER PRIMARY KEY,
name TEXT,
price INTEGER,
weight REAL,
info TEXT,
ammo_cap INTEGER,
availability_west TEXT,
availability_east TEXT)""")
しかし、各項目名に安全性の低い "%s" という置換を使用すると、うまく動作するのです。このように。
for item in self.inventory_names:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item)
self.cursor.close()
1つしか呼び出していないのに、なぜ8つのバインディングがあると思われるのかがわかりません。どうすれば直るのでしょうか?
どのように解決するのですか?
この
Cursor.execute()
メソッドは、2番目のパラメータとしてシーケンスを期待します。あなたはたまたま8文字の文字列を与えています。
代わりに以下の形式を使用します。
self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item])
Python ライブラリリファレンス: sqlite3 カーソルオブジェクト .
関連
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] SQLiteでテーブルが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
-
[解決済み] Pythonの辞書にあるスレッドセーフについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] Django filter queryset __in for *every* item in list
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。