我想通過查詢參數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