2012-08-03 25 views
3

我有一個使用Flask,SQLAlchemy和MySQL編寫的Web應用程序。當我通過表單提交字符串(例如request.form['Username'])時,它們通過SQLAlchemy提交,最終以Unicode字符串的形式提交給MySQL。我的數據庫使用的是latin-1字符集,所以我真的希望在整個過程中使用latin-1。有沒有辦法強制Flask或SQLAlchemy總是使用/轉換爲拉丁-1而無需手動執行string.encode('latin-1')Flask/SQLAlchemy - 如何全局使用拉丁-1而不是UTF-8?

舉例說明這是如何引起問題的,當我做SELECT...WHERE Name=:name並提供request.form['Name']作爲綁定參數時,它會經歷u'Some Name',因此找不到任何匹配。

+3

一個評論,肯定不是一個有用的答案:我堅信你正在朝着錯誤的方向前進。你應該努力使用UTF-8,而不是相反。我看不出任何理由堅持拉丁語-1,特別是因爲您正在處理用戶輸入,正如我所看到的。拉丁語-1將不夠用。我的波蘭朋友肯定會同意。 – 2012-08-03 16:30:18

+0

我相信這是一般的真實情況,但是這是一個只由幾個人內部使用的系統,並且不需要任何特殊字符。 – 2012-08-03 20:16:37

+0

640K應該足夠每個人。對不起,無法抗拒。系統有一個致命的發展趨勢,最近我遇到了太多的編碼問題。 – 2012-08-04 09:54:12

回答

6

您可以設置在連接參數的SQLAlchemy連接到MySQL的編碼:

create_engine('mysql+mysqldb:///mydb?charset=latin1') 

SQLAlchemy documentation on MySQL, unicode section

+0

謝謝,我會嘗試這個當我回家,並有權訪問我的代碼! – 2012-08-03 20:15:00

+0

準確地說,我正在尋找......非常感謝! – 2012-08-04 02:53:37

2

首先,閱讀Flask網站上的unicode章節: http://flask.pocoo.org/docs/unicode/。 它說:「如果你在Python文件中使用非Unicode字符,你必須告訴Python你的文件使用哪種編碼。」

爲此,您可以在python文件的開頭添加以下內容。這告訴解釋器使用什麼編碼。

# coding: latin1 
+0

謝謝,我也會試試這個! – 2012-08-03 20:15:43

相關問題