我关注的是Flask SQLalchemy Quickstart,其中包含单个文件中的所有代码:
这是我的初始 index.py :
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
# [snip] - some classes related to SQLAlchemy are here
if __name__ == '__main__':
app.run(host='0.0.0.0')
我想稍微拆分代码,所以我创建了一个名为 database.py 的单独文件,它将包含所有与数据库相关的代码,并作为模块导入。
我将 index.py 修改为如下所示:
from flask import Flask
# Import my database module
import database
app = Flask(__name__)
if __name__ == '__main__':
app.run(host='0.0.0.0')
文件 database.py :
from flask.ext.sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI]'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
# [snip] - some classes related to SQLAlchemy are here
显然,当我尝试运行此代码时,出现以下错误:
File "database.py", line 5, in <module>
app.config['SQLALCHEMY_DATABASE_URI]'] = 'sqlite:////tmp/test.db'
NameError: name 'app' is not defined
我可以看到这是因为app
对象只存在于父模块中。
我可以将以下几行放回 index.py :
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
但是这会产生类似的问题,因为db
在database.py文件中不可用。
对此进行编码的正确方法是什么?
答案 0 :(得分:1)
您可以通过输入:
将对象app
导入database.py
from index import app
database.py
中的。
答案 1 :(得分:0)
评论后编辑回答:
只需使用
from index import app
在database.py。
中或者,使用
import index
声明,仅使用index.app
而不是app
。
这可以帮助你摆脱python的导入地狱。
顺便说一句:不确定您使用的是哪个IDE。我非常喜欢pycharm。使用它可以重构代码,并自动阻止上述问题。