Мне сложно выполнить мое приложение. Расширение 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)
...
Еще раз обратите внимание на модель импорта db, которую я использовал для разрешения одного и того же объекта db.
Наконец, 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 не импортирует вещи, как я думал. Поэтому я протестировал свою теорию, удалив импортирующую модель и создав пользователя непосредственно внутри сервера... и он работает!
Теперь возникает мой вопрос: есть ли "пуфонический" способ правильно отделить модули, как я хочу, или я должен оставить все в одном пакете?