Flask 框架中 SQLAlchemy 使用時的亂碼問題 Python3.6版

查了很多前輩的資料,包含了與這篇同名的文章以及類似的文章,然後都沒辦法解決問題;所以我也寫了一篇來描述我是如何搞定它的。

一、問題

這幾個月在折騰Flask,以前都是用SQL來自己寫資料庫代碼,這幾天發現了一個叫做SQLAlchemy 的東西,驚為天人;但是在建構SQL資料庫時遇到了中文亂碼的問題。搜搜網上前輩的文章也沒辦法解決,看文檔後終於搞定了。

二、解決

1.實驗

在我爬各位先烈的文章時,自己也做了一些假設與驗證,問題是發生在SQLAlchemy 建立MariaDB數據庫資料表時沒有使用UTF-8字符集,所以雖然在Python物件接口是可以用UTF-8的,但是寫入數據庫時會報錯,在PHPMyAdmin將資料表改成utf8_bin就可以正常儲存中文了。

2.思路

若是如此,那我們只要在SQLAlchemy建立資料表時控制它使用我們希望的字符集就可以了,我想這篇前輩的文章思考方式應該與我相仿,只是有些地方沒辦法動到數據庫設定文件,不然該位前輩的方式應該可行。

3.解套

我開始翻閱SQLAlchemy 1.2 Documentation,猜想應該是在給定數據形態時指定的項目,果然在這裡有寫到相關編碼的設定方式,下面是我的示例代碼

class User(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    username = db.Column(db.String(255))
    password = db.Column(db.String(255))
    name = db.Column(db.String(10, 'utf8_bin', True))

    def __init__(self, username):
        self.username = username

    def __repr__(self):
        return "<User '{}'>".format(self.username)

可選的字符集可以查閱PHPMyAdmin內提供的下拉選單:

 

發佈留言