Im Beispiel liegen die Modelle direkt im Migrationsscript:
https://flask-migrate.readthedocs.org/en/latest/
Da das eigentlich nicht üblich ist: Wie geht man vor, wenn die Modelle in einem Modul liegen?
Flask Migrate
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Wenn du den Import `from other_module import User` hinzufuegst, kommst du genau zu der Situation wie sie im Beispiel besteht.
Es kommt mir aber jetzt nicht so vor, dass das Beispiel der Normalfall ist, schliesslich will man die neuen Models ja zukuenftig benutzen.
Es kommt mir aber jetzt nicht so vor, dass das Beispiel der Normalfall ist, schliesslich will man die neuen Models ja zukuenftig benutzen.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Hallo Cofi
Das habe ich drin:
import x.models
Funktioniert aber nicht, die Tabellen die schon in der DB stehen, werden als zum Löschen vorgesehen ins Migrationsscipt übernommen. Also scheint das irgendwie noch nicht zu genügen. Ja, ein praktischeres Beispiel wäre toll.
Das habe ich drin:
import x.models
Funktioniert aber nicht, die Tabellen die schon in der DB stehen, werden als zum Löschen vorgesehen ins Migrationsscipt übernommen. Also scheint das irgendwie noch nicht zu genügen. Ja, ein praktischeres Beispiel wäre toll.
@meego: Und wenn Du die Models importierst statt nur das Modul welches die Models enthält?
MIt python manage.py db show erhalte ich folgendes angezeigt:
Der Ordner scheint aber leer. Kann man die Version nicht einfach löschen?
Wenn ich das ganze mit python manage.py db upgrade ausführen will, kommen Fehlermeldungen.
Code: Alles auswählen
Rev: 39b3858b84a (head)
Parent: <base>
Path: /home/nuc/Dropbox/J/migrations/versions/39b3858b84a_.py
empty message
Revision ID: 39b3858b84a
Revises: None
Create Date: 2015-12-03 11:26:29.591292
Wenn ich das ganze mit python manage.py db upgrade ausführen will, kommen Fehlermeldungen.
Das File konnte ich mittlerweile löschen. Wenn ich aber mit Alembic upgraden will erhalte ich:
https://gist.github.com/muroshi/44620993540d5bde299c
https://gist.github.com/muroshi/44620993540d5bde299c
Okay, flask-migrate will die Tabellen immer noch nicht übernehmen. (Könnte irgendwie mit den MetaKlasseninfos zu tun haben, meinte jedenfalls jemand auf sqlalchemy).
Meine manage.py:
Bash:
Der Vollständigkeit halber noch __init__.py (die aber eigentlich keine Rolle spielen sollte):
Tree:
Meine manage.py:
Code: Alles auswählen
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand
import J.models
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql:///mydatabase'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
Code: Alles auswählen
>>> dir(manage)
['Flask', 'J', 'Manager', 'Migrate', 'MigrateCommand', 'SQLAlchemy', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'app', 'db', 'manager', 'migrate']
>>> dir(manage.J)
['Admin', 'Country', 'Flask', 'Floor', 'J', 'ModelView', 'PropertyListingType', 'PublicationPeriod', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'admin', 'app', 'configuration', 'db', 'forms', 'models', 'views']
>>> dir(manage.J.models)
['Country', 'Distance', 'Floor', 'Image', 'PropertyListing', 'PropertyListingSubtype', 'PropertyListingType', 'PublicationPeriod', 'RentUnit', 'SaleOrLease', 'SaleUnit', 'Salutation']
Code: Alles auswählen
from flask import Flask
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
app = Flask(__name__)
import J.views
from J.models import Country, PropertyListingType, Floor, PublicationPeriod
from J.db import db
app.config.from_object('J.configuration')
db.init_app(app)
# Creating Administrator interface ::
admin = Admin(app, template_mode='bootstrap3')
# Administrative views ::
admin.add_view(ModelView(Country, db.session))
admin.add_view(ModelView(PropertyListingType, db.session))
admin.add_view(ModelView(Floor, db.session))
admin.add_view(ModelView(PublicationPeriod, db.session))
if __name__ == '__main__':
app.run()
Code: Alles auswählen
.
├── J
│ ├── configuration.py
│ ├── db.py
│ ├── forms.py
│ ├── __init__.py
│ ├── models.py
│ ├── static
│ │ ├── css
│ │ ├── font
│ │ └── js
│ ├── templates
│ │ ├── advertise.html
│ └── views.py
├── manage.py
├── migrations
│ ├── alembic.ini
│ ├── env.py
│ ├── README
│ ├── script.py.mako
│ └── versions
├── __pycache__
│ └── manage.cpython-34.pyc
├── requirements.txt
├── runserver.py
└── venv