Во-первых, я 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, я получу ошибку кругового импорта.
Я действительно понятия не имею, как это сделать или как применить наилучший подход.