2011-02-15 112 views
0

我正在與MySQLdb在Python中的項目。作爲其中的一部分,我將移動用戶詳細信息,包括從一個生成密碼的系統轉移到一個只使用它們的新密碼。MySQLdb輸入其中字符串包含字符串分隔符

單引號,雙引號或三引號可以描述字符串的開始和結束。然而,單引號和雙引號是我正在遷移的4.5k左右用戶中的幾個哈希的一部分。兩種代幣都出現在這些鹽的約450種中。

代碼的編輯版本是如下

Django.execute ('INSERT INTO auth_user (password) VALUES ("' + user.password + '")') 

我曾嘗試在這種數據庫遊標對象所使用的引用類型之間交換,因爲當任一引用類型或其他被檢測到,但是這仍然離開150左右,包含兩者。

我可以使用哪些解決方法?

我已經嘗試了三重引號,但是它們在遊標對象上拋出了一個編程錯誤。

在此先感謝

+0

您是否嘗試過使用預準備語句?看到[這個問題](http://stackoverflow.com/questions/1947750/does-python-support-mysql-prepared-statements) – 2011-02-15 23:04:46

回答

2

查詢參數應提供所有適當的轉義,例如:在

cursor.execute('INSERT INTO auth_user (password) VALUES (%s)', [password]) 

從Django文檔:http://docs.djangoproject.com/en/dev/topics/db/sql/

如果你不熟悉 Python DB-API,請注意cursor.execute()中的SQL 語句使用 佔位符,「%s」,rath呃直接在SQL中添加 參數。如果 您使用此技術,則根據需要,底層 數據庫庫將自動添加引號並轉義到您的 參數。 (還要注意 該Django的期望「%S」 佔位符,而不是「?」佔位符, 其中使用由所述的SQLite的Python 綁定。這是爲了 一致性和理智起見。)

+0

太好了,謝謝你payne – 2011-02-15 23:35:24

相關問題