目前,我在我正在开发的 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/