Python和MySQLdb
DB API使用%s
來表示替換可能會引起混淆。對於DB API,它主要用於避免SQL注入攻擊。在cursor.execute()
聲明中,僅使用%s
其中字符串需要替換纔有意義。
例如。
你要執行的SQL語句:
CREATE TABLE foo (myfield INTEGER);
不
CREATE TABLE 'foo' ('myfield' INTEGER);
像下面可能是合適的:
field1_name_and_type = 'myfield VARCHAR(100)'
sql="create table %s (%s)" % (tablename, field1_name_and_type)
cur.execute(sql)
然後,當你想INSERT
到表中,使用execute語句中的%s
來轉義str英格斯。
my_malicious_sql = input()
cur.execute('INSERT INTO %s VALUES (%%s)' % tablename, my_malicious_sql)
在這個例子中,第一個參數擴大這個樣子,如果tablename == "foo"
:
cur.execute('INSERT INTO foo VALUES (%s)', my_malicious_sql)
然後,MySQLdb的圖書館將正確轉義任何字符串my_malicious_sql
避免SQL注入錯誤和將文本插入到數據庫表中。
錯誤我: 類型錯誤:不是字符串格式化 –
作爲一個方面說明我會建議你使用像SQL鍊金術的ORM期間轉換所有的參數,它會使你的生活更輕鬆,並確保你正在安全的要求, http://www.sqlalchemy.org – lc2817