web-dev-qa-db-ja.com

pyodbc-パラメーターに変数を使用してselectステートメントを実行する方法

Throughputという名前のテーブルのすべての行を反復処理しようとしていますが、特定のDeviceName(data ['DeviceName']に格納しています。次のことを試しましたが、機能しません。

for row in cursor.execute("select * from Throughput where DeviceName=%s"), %(data['DeviceName']):

編集:これも試しましたが、機能しません:

for row in cursor.execute("select * from Throughput where(DeviceName), values(?)", (data['DeviceName']) ):

EDIT2:私の最終的な作業コードのスニペット:

query = "select * from Throughput where DeviceName = '%s'" % data['Device Name']
      try:
          for row in cursor.execute(query):
15
Parth

parameterize ステートメントも可能です:

...
cursor.execute("select * from Throughput where DeviceName = ?", data['DeviceName'])
...

これは、次の理由からより良いアプローチです。

  • SQLインジェクションに対する保護(パラメーター化されたSQLと動的SQLのどちらが使用されているかに関係なく、常にユーザー入力を検証する必要があります)
  • パラメータはデータベースに個別に渡されるため、where句の値を一重引用符で囲むことを心配する必要はありません。
  • SQLは一度準備され、クエリの後続の実行では、再コンパイルする代わりに準備されたステートメントが使用されます
46
Bryan