【发布时间】:2017-08-24 11:08:56
【问题描述】:
+-- myproject
¦
+-- api
¦ +-- tests
¦ +-- app
¦ +-- blueprint_1
¦ +-- blueprint_2
¦
+-- data_collector
+-- tests
+-- app
+-- scraper
我使用 Flask 和 flask-sqlalchemy 的 json api 项目的结构如上。我计划设置的 data_collector 应用程序每小时自动运行一次,以抓取网页上发布的最新每小时数据,然后用这些数据填充数据库。我想用来根据蓝图中指定的查询返回 json 的 api 应用程序。
到目前为止,我已经能够使用 data_collector 应用程序填充一个 sqlite 数据库,但我只能从这个应用程序中查询数据库,而不是 api 应用程序。我一直在阅读flask-sqlalchemy docs 并在其他地方阅读。对于初学者,有没有更好的方法来构建我的项目?
我的 data_collector 应用程序实例化数据库如下:
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
我无法从该文件外部访问 db 或 app 对象。所以我不能把我的模型放在一个单独的文件中,因为我的模型有 db.Models 作为基类。从文档中我认为我需要以下内容而不是上述内容:
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
db.init_app(app)
return app
我在我的两个应用程序中都尝试过,但仍然出现相同的错误:“无法从应用程序导入应用程序”或“无法从应用程序导入 db”。我不确定 api 目录中的应用程序是否需要从 data_collector 访问应用程序,因为它是独立的,但我仍然无法访问我创建的 sqlite 数据库。如何从单独的应用程序访问使用 data_collector 创建的 database.db 文件(我已尽我所能关注文档和互联网上其他地方的信息)?
【问题讨论】:
-
为您的模型创建一个单独的包,该包也具有
db单例。从您的应用程序和db.init_app(app)中的所述模块导入。我想你也可以在模型包中保存所需的数据库配置,并用它来扩展你的应用程序配置。 -
官方文档实际上已经很好地描述了你必须做的事情:flask.pocoo.org/docs/0.12/patterns/appfactories/…
标签: python flask sqlalchemy flask-sqlalchemy