如何更改数据库而不删除它SQLAlchamey

时间:2015-07-30 11:29:08

标签: python flask sqlalchemy

目前我在我正在使用的Web应用程序中使用带有SQLAlchamey和Flask的SQLite数据库。每次我对数据库模式进行更改(如添加列)时,我都必须删除旧数据库,并使用这样的新数据库。

    confirm = input('Are you sure you want to reset the database(y/n): ')
    if not confirm or confirm[0].lower() != 'y':
        print('Canceled')
        exit(0)
    print('Dropping Old DB')
    db.drop_all()
    print('Creating new DB')
    db.create_all()
    print('Adding default admin')
    u = User('admin', 'password', 'Application', 'Admin', User.ADMIN, 'admin@t2t.com', None)
    db.session.add(u)
    db.session.commit()
    print('Finished!')

虽然这在开发阶段起作用,但如果我将这些数据投入生产后必须转储多年的数据,那将是非常糟糕的。如何使SQLAlcahmey只是改变表格?

1 个答案:

答案 0 :(得分:1)

每次更改SQLAlchemy模型时,都需要通过迁移更改架构。 SQLAlchemy没有内置迁移,但还有其他几个库可以帮助您完成迁移。最受欢迎的可能是Alembic。如果您正在使用Flask,还有一些其他的东西,如Flash-Migrate,它们包含Alembic以使其更容易一些(提供了许多与Flask-Script集成的命令)。通常,Alembic可以主要检测您所做的更改,但您可能必须手动进入并编辑迁移脚本以用于某些事情。

Flask-Migrate docs是一个很好的起点。