【问题标题】:Accessing a database created with flask-sqlalchemy from a separate flask app从单独的烧瓶应用程序访问使用烧瓶 sqlalchemy 创建的数据库
【发布时间】: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


【解决方案1】:

您可以手动将db 绑定到app

# db.py
from flask_sqlalchemy import SQLAlchemy

def init_app(app):
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
    db = SQLAlchemy(app)
    app.db = db

# __init__.py
from flask import Flask
from . import db

def create_app():
    app = Flask(__name__)
    db.init_app(app)
    return app

大多数烧瓶应用程序会将dbapp 实例化为全局变量并将它们导入其他文件中。我认为我们不应该导入静态变量(常量除外)。我认为更 Pythonic 的方式是导入模块。

【讨论】:

    猜你喜欢
    • 2019-11-04
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2018-10-26
    相关资源
    最近更新 更多