【问题标题】:Flask db migrate doesn't affect my database tablesFlask db migrate 不会影响我的数据库表
【发布时间】:2014-03-15 12:50:49
【问题描述】:

我正在尝试为 SQLalchemy 实现 Flask 管理器。 当我运行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()

现在它工作得很好!

【问题讨论】:

    标签: python flask flask-sqlalchemy sqlalchemy-migrate flask-migrate


    【解决方案1】:

    Flask-Migrate 与 Flask-SQLAlchemy 会话一起工作。您正在使用原始 sqlalchemy 创建会话。

    我不知道这是否可能。您必须更改 database.py 才能使用 Flask-SQLAlchemy。

    【讨论】:

    • 谢谢,我搜索了 Flask-SQLAlchemy 设置,它成功了!我编辑了我的帖子。
    • 作为一个小改进,你不必设置db.app = app,你可以初始化SQLAlchemy(app)。这样,您也不需要db.init_app
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 2021-08-30
    • 2017-11-11
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多