因爲app最後才加載,因此其餘文件,好比models.py不能從app.py導入任何變量,mysql
要使用db能夠先定義一個,以後再註冊初始化便可:sql
沒有註冊致使的,網上不少方法都不對,應該在程序啓動以前就註冊,不能再數據庫
if __name__ == '__main__':裏面註冊:
只須要調用init_app便可,前提app要配置好數據庫鏈接屬性:
安裝pymysql : pip install pymysqljson
而後修改app配置連接便可,加上pymysql:flask
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost:3307/test?charset=utf8'
sqlalchemy model 定義的對象不能直接轉dict,須要特殊轉化一下app
經過列表生成式獲取全部屬性,而後再經過反射獲取全部屬性和value轉化爲字典:測試
columns = [c.key for c in class_mapper(user.__class__).columns] dict((c, getattr(user, c)) for c in columns)
實際中能夠定義一個response類:spa
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中直接返回對象便可:code
頁面測試:orm
ok!