Как использовать flask -sqlalchemy (db) во всем мире? (Если это возможно) - PullRequest
0 голосов
/ 30 апреля 2020

Во-первых, я Python новичок

Я пытаюсь определить лучший подход к управлению подключением к базе данных, я прочитал, что flask позаботился об этом, поэтому я стал причиной Я использую flask -sqlalchemy вместо sqlalchemy,

Структура моего приложения

src
|-blueprints
   |-cars
      |- cars_bp.py
|-datasets
   |- cars_data.py
__init__.py

Из cars_data.py я хотел бы получить доступ к БД переменная

My init .py

from flask import Flask, g
from flask_sqlalchemy import SQLAlchemy
from . import settings
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = settings.DB_URI

db = SQLAlchemy(app)

with app.app_context():
    from .blueprints.cars import cars_bp
    g.db = db #I'm trying to define a global variable db
    app.register_blueprint(cars_bp)

Мой план cars_bp.py выглядит следующим образом:

    from flask import Blueprint, jsonify
    from ...datasets.cars import cars_dataset

    cars_bp = Blueprint('cars_bp',__name__)

    @cars_bp.route('/cars')
    def cars_number():
        data = cars_dataset.load_cars()
        return jsonify(message="Cars number: {}".format(data['car_id'].count()))

cars_dataset.py

from flask import g
import pandas as pd

def load_cars():
    engine = g.db #I would like something like this
    data = pd.read_sql('SELECT * FROM cars',
        con=engine
    )

    return data

Я хотел бы получить доступ к переменной g.db из моего модуля cars_dataset.py, но не могу, потому что всегда получаю это исключение:

AttributeError: '_AppCtxGlobals' object has no attribute 'db'

Или, если я импортирую переменную db, а не g.db, я получу ошибку кругового импорта.

Я действительно понятия не имею, как это сделать или как применить наилучший подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...