1

查看我发现的以下 Python 2.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'字典中的任何 date 值。

当我注意到%(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

我敢打赌,您稍后会在代码中发现有一个 DB APIexecute语句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 回答