Flask db migrate не влияет на мои таблицы базы данных
Я пытаюсь реализовать менеджер Flask для SQLalchemy. Когда я бегу python run.py db migrate
затем python run.py db upgrade
мои таблицы не пострадали. Я просто удалил поле из моего файла models.py, который должен быть удален из таблицы.
Вот мои файлы:
root / run.py:
#!flask/bin/python
import sys
sys.path.append("/app")
from app import app
app.run(debug = True)
root / app /__init__.py:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand
from app.database import db, db_session, init_db
app = Flask(__name__)
app.config.from_object('settings')
init_db()
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
from catalog.views import catalog
app.register_blueprint(catalog)
root / app / database.py:
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('mysql://root:root@127.0.0.1/mydb', convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
db = declarative_base()
db.query = db_session.query_property()
def init_db():
import app.models
db.metadata.create_all(bind=engine)
Я думаю, что я делаю это неправильно с manager.run()
но я не совсем понимаю, как его запустить.
РЕДАКТИРОВАТЬ:
Я наконец сделал более простые настройки базы данных после совета iurisilvio:
root / app /__init__.py:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.script import Manager
from flask.ext.migrate import Migrate
app = Flask(__name__)
app.config.from_object('settings')
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@127.0.0.1/mydb'
db = SQLAlchemy()
db.app = app
db.init_app(app)
migrate = Migrate(app, db)
manager = Manager(app)
from catalogue.views import catalogue
app.register_blueprint(catalogue)
root / run.py:
#!flask/bin/python
import sys
sys.path.append("/app")
from app import app, manager
from flask.ext.migrate import MigrateCommand
manager.add_command('db', MigrateCommand)
app.debug = True
manager.run()
Теперь это работает довольно хорошо!
1 ответ
Flask-Migrate работает с сеансом Flask-SQLAlchemy. Вы создаете свой сеанс с сырым sqlalchemy.
Я не знаю, возможно ли это вообще. Вы должны изменить свой database.py для работы с Flask-SQLAlchemy.