[英]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 應用程序會將db
和app
實例化為全局變量並將它們導入到其他文件中。 我認為我們不應該導入靜態變量(常量除外)。 我認為更 Pythonic 的方法是導入模塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.