python - 如何更改数据库而不删除它 SQLAlchemy

标签 python flask sqlalchemy

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

    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, '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="28494c454146685c1a5c064b4745" rel="noreferrer noopener nofollow">[email protected]</a>', None)
    db.session.add(u)
    db.session.commit()
    print('Finished!')

虽然这在开发阶段有效,但如果一旦我们将其投入生产,我就不得不转储一年的数据,那将是非常糟糕的。我怎样才能让 SQLAlcahmey 只改变表?

最佳答案

每次对 SQLAlchemy 模型进行更改时,都需要通过迁移来更改架构。 SQLAlchemy 没有内置迁移,但有几个其他库可以帮助您做到这一点。最受欢迎的可能是Alembic 。如果您使用 Flask,还有其他一些东西,例如 Flash-Migrate包装 Alembic 使其变得更容易(提供许多与 Flask-Script 集成的命令)。一般来说,Alembic大部分可以检测到您所做的更改,但您可能必须手动编辑迁移脚本才能完成某些操作。

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

关于python - 如何更改数据库而不删除它 SQLAlchemy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31722579/

相关文章:

python - 在azure上提交用python编写的批处理作业

python - 使用 Flask 路由查询 sqlite

python - Flask python蓝图逻辑代码分离

python - 属性错误 : __enter__ using with statement SqlAlchemy session

python - 如何在 Python 中定义通用协变函数?

python - 在 fit_transform 之后得到 sklearn.LabelEncoder() 映射

Python化if/else

python - 使用 flask 列出目录中的文件

python - 解码 NumPy int64 二进制表示

python - flask-sqlalchemy 列的最大值