2014-11-01 36 views
2

我正在使用Flask和Sqlalchemy構建應用程序。 我app.py文件開始是這樣的:flask-sqlalchemy:導入模型出錯

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 
app = Flask(__name__) 
db = SQLAlchemy(app) 
from models import User 

和我models.py是這樣的:

from app import db 
class User 
.... 

所以當我運行python app.py,我得到一個錯誤說「無法導入名用戶」。我想有一個循環導入的地方,我不明白如何解決它。

但如果我創建另一個文件run.py

from app import app 
app.run() 

一切完美的作品。但爲什麼這會打破循環導入?我無法理解這一點。

+0

這些文件中是否還有其他導入? – dirn 2014-11-02 00:40:41

回答

2

你說得對:這是一個循環導入問題。

我已經得到的方法是通過在根目錄中有另一個文件shared.py文件。在該文件中,創建數據庫對象,

from flask.ext.sqlalchemy import SQLAlchemy 
db = SQLAlchemy() 

在你app/init.py,不創建一個新的數據庫對象。相反,做

from shared import db 
db.init_app(app) 

在您要使用的數據庫對象,包括你的模型文件中的任何地方,從shared.py導入:

from shared import db 
# do stuff with db 

這樣,在共享文件的對象將有已被應用程序上下文初始化,並且沒有循環導入的機會。

+0

試試吧,謝謝! – kurtgn 2014-11-03 10:13:01