因为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!