project_name
|- my_app
|- __init__.py
|- run.py
|- models.py
第一個例子
run.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
from models import User
db.create_all()
if __name__ == '__main__':
app.run()
models.py
from run import db
class User(db.Model):
#...
__ INIT的.py __爲空
運行這個例子後,我得到這個錯誤:
ImportError: cannot import name User
此錯誤描述應用程序變量的圓形進口在models.py(據我所知)。
第二示例
run.py
from my_app import app
if __name__ == '__main__':
app.run()
models.py
from my_app import db
class User(db.Model):
#...
__ init.p __
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
from models import User
db.create_all()
的現在所有的作品都正確。
而且,在這一點上,我不明白,爲什麼相同的代碼給了我不同的邏輯?
魔法在哪裏?爲什麼循環導入__ init.py __不會引發錯誤?
謝謝!
謝謝你的回答!如果我正確理解,我的第一個例子不起作用,因爲我試圖在執行的文件中使用循環導入? – jQuick
@jQuick這或多或少歸結爲什麼 - 要記住的重要一點是,執行的文件尚未解析所有定義,因此尚未準備好讓其他文件嘗試從它。 – daveruinseverything