第一次数据库迁移
包含映射到 User
数据库模型的用户表的迁移存储库生成后,是时候创建第一次数据库迁移了。 有两种方法来创建数据库迁移:手动或自动。 要自动生成迁移,Alembic 会将数据库模型定义的数据库模式与数据库中当前使用的实际数据库模式进行比较。 然后,使用必要的更改来填充迁移脚本,以使数据库模式与应用程序模型匹配。 当前情况是,由于之前没有数据库,自动迁移将把整个 User 模型添加到迁移脚本中。 flask db migrate
子命令生成这些自动迁移:
(venv) $ flask db migrate -m "users table"
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.autogenerate.compare] Detected added table 'user'
INFO [alembic.autogenerate.compare] Detected added index 'ix_user_email' on '['email']'
INFO [alembic.autogenerate.compare] Detected added index 'ix_user_username' on '['username']'
Generating /home/miguel/microblog/migrations/versions/e517276bb1c2_users_table.py ... done
通过命令输出,你可以了解到 Alembic 在创建迁移的过程中执行了哪些逻辑。前两行是常规信息,通常可以忽略。 之后的输出表明检测到了一个用户表和两个索引。 然后它会告诉你迁移脚本的输出路径。 e517276bb1c2
是自动生成的一个用于迁移的唯一标识(你运行的结果会有所不同)。 -m
可选参数为迁移添加了一个简短的注释。
生成的迁移脚本现在是你项目的一部分了,需要将其合并到源代码管理中。 如果你好奇,并检查了它的代码,就会发现它有两个函数叫 upgrade()
和 downgrade()
。 upgrade()
函数应用迁移, downgrade()
函数回滚迁移。 Alembic 通过使用降级方法可以将数据库迁移到历史中的任何点,甚至迁移到较旧的版本。
flask db migrate
命令不会对数据库进行任何更改,只会生成迁移脚本。 要将更改应用到数据库,必须使用 flask db upgrade
命令。
(venv) $ flask db upgrade
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running upgrade -> e517276bb1c2, users table
因为本应用使用 SQLite,所以 upgrade
命令检测到数据库不存在时,会创建它(在这个命令完成之后,你会注意到一个名为 app.db 的文件,即 SQLite 数据库)。 在使用类似 MySQL 和 PostgreSQL 的数据库服务时,必须在运行 upgrade
之前在数据库服务器上创建数据库。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论