簡體   English   中英

從單獨的燒瓶應用程序訪問使用燒瓶 sqlalchemy 創建的數據庫

[英]Accessing a database created with flask-sqlalchemy from a separate flask app

+-- 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 文檔並在其他地方閱讀。 首先,有沒有更好的方式來構建我的項目?

我的 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

我在我的兩個應用程序中都試過這個,但仍然得到相同的錯誤:“無法從應用程序導入應用程序”或“無法從應用程序導入數據庫”。 我不確定 api 目錄中的應用程序是否需要從 data_collector 訪問應用程序,因為它是獨立的,但我仍然無法訪問我創建的 sqlite 數據庫。 如何從單獨的應用程序訪問使用 data_collector 創建的 database.db 文件(我已盡最大努力遵循文檔和互聯網上其他地方的信息)?

您可以手動將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

大多數 Flask 應用程序會將dbapp實例化為全局變量並將它們導入到其他文件中。 我認為我們不應該導入靜態變量(常量除外)。 我認為更 Pythonic 的方法是導入模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM