Flask SQLALchemy: как добавить исходные данные в init-db без циклического импорта?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Flask SQLALchemy: как добавить исходные данные в init-db без циклического импорта?

Сообщение Anonymous »


Flask SQLALchemy: как добавить исходные данные в init-db без циклического импорта? У меня есть приложение flask, которое в рамках процесса инициализации создает таблицы, определенные моделями flask-sqlalchemy. Я пытаюсь обновить команду init-db, чтобы добавить исходные данные во вновь созданные таблицы. Однако для этого мне необходимо ссылаться на те же модели sqlalchemy, которые импортируются из файла приложения, тем самым создавая циклический импорт. Я понимаю проблему, но не понимаю, как ее обойти. Мне нужны модели для создания исходных данных для таблиц, но для моделей требуется экземпляр базы данных, определенный в файле приложения. файл приложения и файлы модели приведены ниже:

src/__init__.py

импортировать клик из колбы импорта колбы из flask.cli импортировать с помощью_appcontext из flask_sqlalchemy импортировать SQLAlchemy из sqlalchemy.orm импорт DeclarativeBase из src.places.models импортировать Место, Местоположение класс Base (DeclarativeBase): проходить db = SQLAlchemy(model_class=Base) защита create_app (test_config = Нет): """Создайте и настройте экземпляр приложения Flask.""" приложение = Flask(__name__, instance_relative_config=True) ... # инициализируем Flask-SQLAlchemy и команду init-db db.init_app(приложение) app.cli.add_command(init_db_command) # применяем чертежи к приложению ... вернуть приложение @click.command("init-db") @with_appcontext защита init_db_command(): """Очистить существующие данные и создать новые таблицы.""" init_db() click.echo("База данных инициализирована.") защита init_db(): db.drop_all() db.create_all() add_initial_data() защита add_initial_data(): дом = Место("Дом") db.session.add(домой) home_loc = Местоположение(...........) db.session.add(home_loc) db.session.flush() db.session.commit() src/models.py
из sqlalchemy import Integer, String, Float, ForeignKey из базы данных импорта src Место класса (db.Model): __tablename__ = "места" id = db.Column(Целое число, Primary_key=True, автоинкремент=True) имя = db.Column(String(40), unique=True) def __init__(я, имя): self.name = имя Местоположение класса (db.Model): __tablename__ = "местоположения" id = db.Column(Целое число, Primary_key=True, автоинкремент=True) Place_id = db.Column(Целое число, ForeignKey(Place.id)) map_id = db.Column(String) широта = db.Column(Float) долгота = db.Column(Float) адрес = db.Column(String(80))
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»