Chciałbym użyć Flask-Migrate i patrzę na ich przykład:W jaki sposób można podzielić modele Flask z aplikacji app.py bez przerzucania obiektu db?
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
if __name__ == '__main__':
manager.run()
Działa to doskonale jako prosty przykład grać, ale mogę mieć więcej niż jednego modelu, a ja nie chcę definiować modele zarówno w tym skrypcie, jak i tym, który definiuje mój kod aplikacji. Dlatego chcę je przenieść do pliku modelu, który mogę udostępnić między tymi dwoma.
Próbuję to zrobić, umieszczając klasę User
w models.py
, a następnie importując użytkownika z tego miejsca. Niestety, to rzuca NameError: name 'db' is not defined
.
Moje pytanie (s) są:
- Czy muszę używać
db = SQLAlchemy(app)
w moimmodels.py
, a jeśli tak, to będzie dostępne zarówno w moim skrypcie migracji oraz zastosowanie kolby samego? - Jeśli nie mogę (lub nie powinienem) umieścić go w
models.py
, w jaki sposób mogę wykorzystać moje modele w ich własnym pliku bez przekazywaniadb
na całym?
Sprawdź to https://realpython.com/blog/python/python-web-applications-with-flask-part-ii/ – PetarP