2014-11-01 87 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