Мне трудно запустить мое приложение. Расширение Flask-SQLAlchemy создает пустую базу данных всякий раз, когда я пытаюсь разделить модуль на пакеты. Чтобы лучше объяснить, что я делаю, позвольте мне показать, как устроен мой проект:
Project
|
|-- Model
| |-- __init__.py
| |-- User.py
|
|-- Server
| |-- __init__.py
|
|-- API
| |-- __init__.py
Идея проста: хочу создать пакет для своей модели, так как не люблю выкладывать код в один пакет, и отдельные "под" проекты (типа API), так как в будущем буду использовать блюпринты для лучшего изолировать вспомогательные приложения.
Код очень прост:
Во-первых, Model.__init__.py
:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
Обратите внимание, что я создал это только для использования одного объекта SQLAlchemy()
в пакете. Нет, мы идем к Model.User
from Model import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(80))
Age = db.Column(db.Integer)
...
Еще раз обратите внимание на базу данных импорта из модели, которую я использовал для разрешения того же объекта базы данных.
Наконец, Server.__init__.py
выглядит так:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import Model, API
db = Model.db
def main():
app = Flask("__main__")
db = SQLAlchemy(app)
db.create_all()
API.SetAPIHookers(app)
app.run(host="0.0.0.0", port=5000, debug=True)
if __name__ == "__main__":
main()
С моей точки зрения, db = SQLAlchemy(app)
позволяет мне передавать объект моего приложения без создания циклической ссылки.
Проблема в том, что всякий раз, когда я запускаю этот код, файл базы данных sqlite создается пустым. Это заставило меня подумать, что, возможно, Python не импортирует вещи, как я думал. Итак, я проверил свою теорию, удалив модель импорта и создав пользователя непосредственно внутри сервера... и вуаля, это сработало!
Теперь возникает мой вопрос: есть ли «питоновский» способ правильно разделить модули, как я хочу, или я должен оставить все в одном пакете?