Я создаю приложение фляги foo
, до этого момента так организованы файлы
foo
|-- app
| |-- __init__.py
| |-- models.py
|
|-- foo.py
in __init__.py
Я определяю функцию для создания приложения, которое затем вызывается из foo.py
. Вот как выглядит __init__.py
:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def create_app(config_name):
app = Flask(__name__)
...
db.init_app(app)
Модуль models.py
импортирует db
и получает доступ к существующей базе данных . До сих пор я использовал db.engine.execute(<...>)
для выполнения запросов, но это кажется неэффективным. Например, у меня есть таблица с именем var
, к которой я постоянно обращаюсь в своем приложении, поэтому я определяю класс в models.py
class Var(object):
def query ...
но я бы хотел использовать alchemy
вместо:
class Var(db.Model):
...
Я пытался следовать ответам здесь , чтобы построить свое приложение, но это проблемы, которые я нашел до сих пор
Если я вставлю base.metadata.reflect(db.engine)
в функцию create_app
, я получу сообщение об ошибке, в котором говорится, что мне нужно создать контекст, который не имеет большого смысла, поскольку именно здесь я создавая это. Конечно, если я сделаю with app.app_context(): base.metadata.reflect(db.engine)
, я смогу обойти, но тогда проблема все еще остается, когда я создаю класс Var
:
класс Var (db.Model):
таблица = db.Model.metadata.tables ['var']
Словарь пустой, поэтому я получаю KeyError
.
- Когда я пытаюсь создать контекст внутри
models
для создания моего класса Var
, он также не работает, потому что не может импортировать его.
Я перепробовал все предложения, которые нашел, но ни одно из них не работает. Спасибо за вашу помощь