繁体   English   中英

使用 Flask 和 SQLite,如何从一个数据库架构迁移到新的架构?

[英]Using Flask and SQLite, how do I migrate from one database schema to a new one?

在 flask-sqlalchemy 的帮助下,我正在使用 sqlite 作为我的数据库来制作一个简单的 web 应用程序。 创建应用程序后,我意识到我需要在数据库中添加一个新列。 但是,当我直接修改 models.py 文件时,他们说新列不可用作为错误。

我的理解是这可能是因为数据库已经创建,所以我无法直接编辑 models.py。 我可以知道如何在数据库中添加“照片”列吗? 我应该删除当前的数据库文件(db.sqlite)并再次创建表吗?

这是当前的models.py文件:

  1 from flask_login import UserMixin
  2 from . import db
  3
  4 class User(UserMixin, db.Model):
  5     __tablename__ = "user"
  6     __table_args__ = {'extend_existing': True}
  7
  8     id = db.Column(db.Integer, primary_key=True)
  9     email = db.Column(db.String(100), unique=True)
 10     password = db.Column(db.String(100))
 11     name = db.Column(db.String(1000))
 12
 13 class Item(UserMixin, db.Model):
 14     __tablename__ = "item"
 15     __table_args__ = {'extend_existing': True}
 16
 17     id = db.Column(db.Integer, primary_key=True)
 18     item = db.Column(db.String(100), nullable=False)
 19     description = db.Column(db.String(1000), nullable=False)
 20     occurdate = db.Column(db.Date)
 21     time = db.Column(db.Time)
 22     # photo = db.Column(db.LargeBinary)

当您拥有 SQL 数据库并且想要更改现有数据库的架构时,您基本上有三个选择:

  1. 使用数据库迁移工具(最适合大型项目)
  2. 自己手动完成(对于小型项目可能更好)
  3. 删除数据库并从头开始

迁移工具

这些是为您迁移数据库的工具,通常通过对数据库的每次迭代进行版本控制并使用脚本在版本之间迁移数据库。 Alembic是 SQLAlchemy 官方支持的工具,被很多用户普遍推荐。

自己做

如果您不想使用工具的麻烦,您可以直接连接到您的数据库(例如,使用 sqlite 命令行工具)并运行alter table命令。 这是迁移工具为您自动执行的操作,但如果您想保持简单并直接与数据库交互,使用alter table命令通常非常简单。

删除并重新创建

当然,您也可以只删除数据库并从头开始。

通常,当您只是对项目进行原型设计并且在决定如何布置表格方面尚未取得很大进展时,这是最好的方法。

但是,一旦您在生产数据库中拥有真实数据,这不是一种选择,因此无论哪种方式,熟悉前两种方法可能都是值得的。

暂无
暂无

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

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