刚开始结构是这样的
app
- init.py
- models.py
init.py是这样的
`
from flask import Flask
from flask-sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
`
models.py是这样的
`
from init import db
class User(db.Model):
pass
`
但这就导致了循环引用的问题。在调用init的时候会先导入models,但调用models的时候又会调用init。你调用我我调用你,就产生了一个死循环。这时候就需要把db的初始化提出来了。
把结构变成这样
app
- init.py
- models.py
- exts.py
在exts.py里初始化db
`
from flask-sqlalchemy import SQLAlchemy
# 不需要传入app
db = SQLAlchemy()
`
然后在init.py里把db的设置修改为
`
db.init_app(app)
`
在models.py里把db的设置修改为
`
from exts import db
`
这样就解决了flask循环引用的问题。
博客介绍了Flask开发中循环引用问题的产生及解决办法。初始代码结构导致调用init和models时出现死循环,通过将db的初始化提取到exts.py文件,在init.py中使用db.init_app(app),并修改models.py的导入方式,成功解决了循环引用问题。

1229

被折叠的 条评论
为什么被折叠?



