我想通过查询参数cursor.execute()
方法MySQLdb
作为命名字典,因此它们是从SQL注入转义。Python MySQLdb:查询参数作为命名字典
你能解释为什么这给KeyError异常:
>>>c.execute('select id from users where username=%(user)s', {'user':'bob',})
KeyError: 'user'
MySQLdb的手动http://mysql-python.sourceforge.net/MySQLdb.html说:
* paramstyle
字符串常量说明参数标记的类型由接口格式化的预期。设置为'format'= ANSI C printf格式代码,例如'... WHERE name =%s'。如果映射对象用于conn.execute(),那么接口实际上使用'pyformat'= Python扩展格式代码,例如, '... WHERE name =%(name)s'。然而,API目前不允许超过一个风格paramstyle规范*
我插入***列值***。文档中的一行代表以下代码是非法的: 'c.execute('从%s选择ID,其中用户名=%s',('users','bob'))' – mercador
@mercador对, '从%s'片断是因为您尝试参数化表名称而导致失败的原因。以这种方式使用'execute'的好处是它有助于防止SQL注入,但是如果您采取适当的安全预防措施(我不是专家,但会涉及适当的消毒/转义参数),您可以使用Python内置的字符串格式来构建查询,然后将其传递给'execute'。同样,SQL注入是主要关心的问题。希望这可以帮助! – RocketDonkey