繁体   English   中英

使用带有声明性基础的烧瓶迁移而不是 db.model

[英]Use flask-migrate with declarative base instead of db.model

我想动态地将列添加到我的数据库中的表中,因为我不想在 class 中设置它时指定所有列

我已经下载了 flask migrate 我已经开始使用 db.model 但我想让它直接使用声明性基础。 我该怎么做呢?

这就是我使用 db.model 进行设置的方式

app = Flask(__name__, static_folder = "static", template_folder = "templates/vue_template")
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql+psycopg2://user:password@localhost:5432/testdb"

db =SQLAlchemy(app)

class Person(db.Model):
    id=db.Column(db.Integer, primary_key=True)
    name=db.Column(db.String(80))
    username=db.Column(db.String(80))




migrate = Migrate(app,db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)

if __name__ == '__main__':
    manager.run()

然后我在终端中运行以下命令

python test.py db init

python test.py db migrate -m "Initial migration."

python test.py db upgrade

如果我然后将新列email = db.Column(db.String(120))添加到 Person 表并运行

python test.py db migrate -m "Add column"

python test.py db upgrade

然后我可以在数据库的 Person 表中看到新列。 伟大的。

问题
但是如何使用基于 declarative_base 的表执行相同的列添加过程(如下所示)
即使用 flask-migrate 将列email = Column(String)添加到下表

class Person(Base):
    __tablename__ = "person"

    id = Column(Integer, primary_key=True)
    name=Column(String)
    username=Column(String)

我需要对代码进行哪些更改才能使其正常工作?

谢谢

Flask-Migrate 是一个与 Flask-SQLAlchemy 一起工作的扩展。 如果你不使用 Flask-SQLAlchemy,那么你就不能使用 Flask-Migrate。

但是 Flask-Migrate 在底层使用了 Alembic,也可以直接使用 Alembic。 所以这是我的建议,只需使用 Alembic。 它在配置和设置方面需要更多的工作,但它适用于您的 SQLAlchemy 项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM