【问题标题】:How do I handle migrations in sqlalchemy without any framework?如何在没有任何框架的情况下处理 sqlalchemy 中的迁移?
【发布时间】:2016-04-02 05:48:27
【问题描述】:

我见过 sqlalchemy-migrate 和 alembic,但我不想使用这些框架。如何编写迁移脚本?据我了解,大多数迁移都围绕更改/删除现有表?此外,我主要在 orm 级别而不是架构/核心/引擎级别使用 sqlalchemy?

我想自己动手的原因主要是学习目的和了解 django orm 如何自动生成迁移脚本?

【问题讨论】:

  • 你想迁移到什么地方?现有的表只是由 ORM 包装,只是表。您所说的“迁移”是从一个对象模型修改后的 OM。如果您放弃 ORM 框架,则无需迁移任何内容,只需将数据愉快地放在表中即可。
  • 当我说迁移时,我的意思是如何处理对现有表的架构更改(添加/删除列)?在 django 中,有 python manage.py makemigrations migrate 命令。我需要类似的东西。
  • 高级思想如下:从DB中读取对象模型,从代码中读取对象模型,比较并生成有差异的迁移脚本。您可以阅读上述框架的源代码以了解其实现方式。

标签: python django python-3.x sqlalchemy


【解决方案1】:

您应该只使用 alembic 来执行原始 sql 来启动。然后,如果您决定尝试使用更多的 alembic 功能,您将万事俱备。

例如,在创建一个名为 drop nick 的新修订后,您可以执行原始 sql:

op.execute ('ALTER TABLE users DROP COLUMN nickname')

这种方式 alembic 可以处理版本号,但您可以,或者更确切地说,必须手动执行所有 sql 操作。

【讨论】:

  • alembic 版本控制系统仅根据版本目录中的文件检查单个版本 ID 表,以决定升级什么。初始化 alembic 目录/表并运行一些空白迁移后,就很容易理解了。重新创建该部分只是一项忙碌的工作。
猜你喜欢
  • 1970-01-01
  • 2012-09-21
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 2019-07-29
  • 2019-07-28
  • 2013-07-21
相关资源
最近更新 更多