1

私が見つけたPython2.6コードの次の行を確認してください。

key = 'hire_date' 
update_dict['key'] = update_dict[key]     #added e.g. {..., 'key': '12/31/1999'}
if key == 'hire_date':
     query_string = "UPDATE employee SET " + key + "= CAST(%(key)s AS DATE) WHERE emp_id = '" + emp.employee + "'"

私はこのコードをテストしました、そしてそれは働きます。データベース内の従業員のhire_dateフィールドを'key'、ディクショナリ内の日付の値に正常に更新します。

%(key)sどういうわけかで辞書の値を取得できることに気付いたとき、私はそれをパラメータ化する途中でした'key'。それはどのようにそれをしますか?% dictionaryOrTupleOrWhateverこれを機能させるには、文字列の後に追加する必要があるといつも思っていました。

4

2 に答える 2

3

貼り付けたコードでは、補間は行われません。ただし、変数は後で補間される可能性があります。

>>> x = "%(var)s" # no interpolation yet
>>> d = {'var': 88}
>>> x % d # interpolate into the stored string
'88'

投稿したコードがSQLのように見えることを考えると、後でSQLライブラリ呼び出しを介して補間することもできます。多くのSQLインターフェイスライブラリは、記号を使用した同様の種類の文字列置換を提供し%、SQLライブラリバージョンには悪意のあるインジェクション攻撃を防ぐためのさまざまな保護手段があるため、組み込みの文字列置換ではなくこれらを使用するようにユーザーに促します。

于 2012-08-03T19:21:52.933 に答える
2

コードの後半で、パラメーターとして受け取るDBAPIexecuteステートメントがあることがわかると思います。update_dict次に、DB APIは、Python文字列フォーマットの代わりに置換を実行するため、バインディングを適切に処理します。

これを見てください:http://furius.ca/pubcode/pub/antiorm/lib/python/dbapiext.html#escaping-in-the-dbapi-2-0

于 2012-08-03T19:23:21.787 に答える