Flask db migrate对我的数据库表没有影响

1 投票
1 回答
1939 浏览
提问于 2025-04-17 22:26

我正在尝试为SQLalchemy实现Flask管理器。
当我运行 python run.py db migrate 然后 python run.py db upgrade 时,我的表没有受到影响。我刚刚从我的models.py文件中删除了一个字段,这个字段应该从表中移除。

这是我的文件:

根目录下的run.py:

#!flask/bin/python
import sys
sys.path.append("/app")
from app import app
app.run(debug = True)

根目录下的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)

根目录下的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的建议下,我终于简化了数据库设置:

根目录下的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)

根目录下的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 个回答

1

Flask-Migrate 是和 Flask-SQLAlchemy 一起使用的,它需要用 Flask-SQLAlchemy 来管理数据库连接。而你现在是用原生的 sqlalchemy 来创建你的数据库连接。

我不太确定这样做是否可行。你需要修改你的 database.py 文件,让它能够和 Flask-SQLAlchemy 一起工作。

撰写回答