gpt4 book ai didi

python - 在 Flask 应用程序中导入 create_all() 模型时的循环依赖

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:59 25 4
gpt4 key购买 nike

上下文:

  • python 3.6
  • flask
  • flask_restful
  • flask _sqlalchemy

目标:在第一次请求 flask restful api 之前创建数据库表,避免模型之间的循环依赖。

问题:当我执行第一个请求时,@app.before_first_request 被按预期调用,但它似乎正在考虑循环依赖的包含:

File "./app.py", in create_tables
from models.uf_model import UfModel
File "home/server/models/uf_model.py", in <module>
from models.cidade_model import CidadeModel
File "/home/server/models/cidade_model.py", in <module>
from models.uf_model import UfModel
ImportError: cannot import name 'UfModel'

我的问题:即使使用 app_context(),如类似问题中所建议的,循环依赖也没有解决。如何解决?我做错了什么?

我的代码:

db.py:

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

uf_model.py 一个 uf 有很多 cidades

from db import db, filter_query
from datetime import datetime
from models.cidade_model import CidadeModel

class 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)

为了轻松找到给定 uf 的所有 cidades,我创建了该关系。

cidade_model.py 一个 cidade 只有一个 uf

from db import db, filter_query
from datetime import datetime

from models.uf_model import UfModel

class 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')

为了轻松找到给定 cidadeuf,我创建了这种关系。

应用程序.py:

from db import db

app = Flask(__name__)
api = Api(app)

@app.before_first_request
def 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)

最佳答案

您有两种方法来定义模型中的关系,要么引用模型类本身,要么使用类名(添加后者是为了避免此类循环依赖问题)。

由于您已经定义了与字符串的关系(例如:cidade_model.py 中的 uf = db.relationship('UfModel')),因此您不需要从模型中导入 .uf_model import UfModel 了。 uf_model.py 中的 CidadeModel 也是如此。您没有使用导入的类,因此您可以删除导入行。

关于python - 在 Flask 应用程序中导入 create_all() 模型时的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57859068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com