一 ImportError: cannot import name 'db'
由於app最后才加載,所以其他文件,比如models.py不能從app.py導入任何變量,
要使用db可以先定義一個,之后再注冊初始化即可:

二 The sqlalchemy extension was not registered to the current application
沒有注冊導致的,網上很多方法都不對,應該在程序啟動之前就注冊,不能再
if __name__ == '__main__':里面注冊:

只需要調用init_app即可,前提app要配置好數據庫連接屬性:

三 No module named 'MySQLdb' flask
安裝pymysql : pip install pymysql
然后修改app配置鏈接即可,加上pymysql:
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost:3307/test?charset=utf8'
四 flask 'User' object is not iterable
sqlalchemy model 定義的對象不能直接轉dict,需要特殊轉化一下
通過列表生成式獲取所有屬性,然后再通過反射獲取所有屬性和value轉化為字典:
columns = [c.key for c in class_mapper(user.__class__).columns] dict((c, getattr(user, c)) for c in columns)
實際中可以定義一個response類:
from flask import Response, jsonify from sqlalchemy.orm import class_mapper # 定義response返回類,自動解析json class JSONResponse(Response): @classmethod def force_type(cls, response, environ=None): if isinstance(response, dict): # 判斷返回類型是否是字典(JSON) response = jsonify(response) # 轉換 if isinstance(response, db.Model): # 對象,只用db,Model即可轉json columns = [c.key for c in class_mapper(response.__class__).columns] response = jsonify(dict((c, getattr(response, c)) for c in columns)) return super().force_type(response, environ)
view中直接返回對象即可:

頁面測試:

ok!
