Seite 1 von 1

Flask Migrate

Verfasst: Donnerstag 3. Dezember 2015, 12:02
von meego
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?

Re: Flask Migrate

Verfasst: Donnerstag 3. Dezember 2015, 12:43
von cofi
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.

Re: Flask Migrate

Verfasst: Donnerstag 3. Dezember 2015, 13:34
von meego
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.

Re: Flask Migrate

Verfasst: Donnerstag 3. Dezember 2015, 13:38
von BlackJack
@meego: Und wenn Du die Models importierst statt nur das Modul welches die Models enthält?

Re: Flask Migrate

Verfasst: Donnerstag 3. Dezember 2015, 13:46
von meego
Also so wie Cofi oben sagt, jede einzelne Class namentlich in die Symboltabelle importieren?

Re: Flask Migrate

Verfasst: Donnerstag 3. Dezember 2015, 15:24
von meego
MIt python manage.py db show erhalte ich folgendes angezeigt:

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
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.

Re: Flask Migrate

Verfasst: Donnerstag 3. Dezember 2015, 19:09
von meego
Das File konnte ich mittlerweile löschen. Wenn ich aber mit Alembic upgraden will erhalte ich:
https://gist.github.com/muroshi/44620993540d5bde299c

Re: Flask Migrate

Verfasst: Freitag 4. Dezember 2015, 14:44
von meego
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:

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()
Bash:

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']
Der Vollständigkeit halber noch __init__.py (die aber eigentlich keine Rolle spielen sollte):

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()
Tree:

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