しない方法:
id = raw_input("Enter the Station ID")
query = "select foo from bar where station={station_id}"
cursor.execute(query.format(station_id=id))
誰かが悪意のある SQL 文字列を入力すると、それが実行されます。
Python を使用して文字列をフォーマットする代わりに、データベース バックエンドに処理させます。これを行う方法は、使用しているデータベースによって異なります。(?) これは Oracle では正しいと思いますが、テストできません。一部のデータベースでは、異なる文字が使用されています (たとえば、SQLite の場合の?
代わりに)。%s
id = raw_input("Enter the Station ID")
query = "select foo from bar where station=%s"
cursor.execute(query, [id])
編集:どうやら、cx_Oracle
デフォルトで「名前付き」のparamstyleに設定されています(これは.を見て確認できcx_Oracle.paramstyle
ます)。その場合、次のようにします。
query = "select foo from bar where station=:station_id"
cursor.execute(query, station_id=id)