1. 程式人生 > >Python3中Flask使用flask_sqlalchemy的的問題以及解決

Python3中Flask使用flask_sqlalchemy的的問題以及解決

(一)

Python3在flask_sqlalchemy中相比改動了一些比如模組的匯入。

在Python2中應該是 from flask.ext.sqlalchemy impot SQLAlchemy

雖然在Python3中這樣使用其實不會錯但是Python3中不贊成這樣使用可能在未來會取消flask.ext.sqlalchemy這是個趨勢

在Python3中建議使用from flask_sqlalchemy import SQLAlchemy


(二)

第一次使用這個模組需要對原始碼進行改變及設定:

設定SQLALCHEMY_TRACK_MODIFICATIONS 為True或False

/home/air/Desktop/microblog/flask/local/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py:839: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
提示我們需要設定引數‘True’ 或者 ‘’Flase‘ 是說 SQLALCHEMY_TRACK_MODIFICATIONS 不能預設什麼都沒有, 
得設定其為  True  或者  False , 
所以就去 /flask/local/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py 這個檔案中進行更改, 
提示給的839行,在前面幾行的位置有這樣的 setdefault , 
把None改為True;:

...
 833            track_modifications = app.config.setdefault(
 834             'SQLALCHEMY_TRACK_MODIFICATIONS', True #這裡,一開始是None需要改變為True or Flase
 835         )
...

(三) Python3與Python2中連線也是有區別的 這裡不詳講參考連線為點選開啟連結
大概就是如下:
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:[email protected]/tushare?charset=utf8' #這是Python2的
但是在Python3進行了改變: 正確的連線應該是這樣
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]/tushare?charset=utf8' #這是Python3的
為什麼會這樣我也不知道,到時看看原始碼再說
如果不這樣連線會怎麼樣,恭喜你會爆出一堆你不知道是什麼鬼的錯誤
return __import__('MySQLdb')
ModuleNotFoundError: No module named 'MySQLdb'
解決方法就是上面的Python2請無視
Flask-SQLAlchemy的中文文件連線 Flask-SQLAlchem