语境:蟒蛇 3.6烧瓶flask_restfulflask_sqlalchemyObjective:在第一次请求flask restful api之前创建数据库表,避免模型之间的循环依赖。问题:当我执行第一个请求时,@app.before_first_request按预期调用,但似乎正在考虑包含循环依赖:File "./app.py", in create_tables from models.uf_model import UfModelFile "home/server/models/uf_model.py", in <module> from models.cidade_model import CidadeModelFile "/home/server/models/cidade_model.py", in <module> from models.uf_model import UfModelImportError: cannot import name 'UfModel'我的问题:即使使用app_context(),如类似问题中所建议的那样,循环依赖也没有解决。如何解决?我究竟做错了什么?我的代码:数据库.py:from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()uf_model.py 一个 uf 有许多 cidadesfrom db import db, filter_queryfrom datetime import datetimefrom models.cidade_model import CidadeModelclass UfModel(db.Model): __tablename__ = 'uf' unfe_id = db.Column(db.Integer, primary_key=True) cidades = db.relationship('CidadeModel', backref='unfe_cidades', lazy=True, uselist=False)为了轻松找到cidades给定的所有内容uf,我创建了这种关系。cidade_model.py 一个 cidade 只有一个 uffrom db import db, filter_queryfrom datetime import datetimefrom models.uf_model import UfModelclass CidadeModel(db.Model): __tablename__ = 'cidade' cida_id = db.Column(db.Integer, primary_key=True) cida_unfe_id = db.Column(db.Integer, db.ForeignKey('uf.unfe_id'), nullable=False, index=True) uf = db.relationship('UfModel')为了轻松找到uf给定的cidade,我创建了这种关系。应用程序.py:from db import dbapp = Flask(__name__)api = Api(app)@app.before_first_requestdef create_tables(): with app.app_context(): from models.uf_model import UfModel from models.cidade_model import CidadeModel db.create_all()if __name__ == '__main__': # some resources api.add_resource db.init_app(app)
1 回答
白板的微信
TA贡献1883条经验 获得超3个赞
你有两种方法来定义模型中的关系,要么引用模型类本身,要么使用类名(添加后者是为了避免这种循环依赖问题)。
由于您已经定义了与字符串的关系(例如:uf = db.relationship('UfModel')
在 cidade_model.py 中),因此您不再需要导入from models.uf_model import UfModel
。uf_model.pyCidadeModel
也是如此。您没有使用导入的类,因此您可以删除导入行。
添加回答
举报
0/150
提交
取消