栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Flask-SQLAlchemy在Alembic迁移自动生成中未检测到任何更改

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Flask-SQLAlchemy在Alembic迁移自动生成中未检测到任何更改

Alembic无法自动检测表或列的重命名。默认情况下,它也不会查找列类型更改,但是

compare_type
可以为此启用该选项。

摘自Alembic文档:

默认情况下,自动生成将检测:

  • 表添加,删除。
  • 列的添加,删除。
  • 列上可为空的状态的更改。
    自动生成可以选择检测:

更改列类型。如果设置为compare_type=True,则会发生这种情况EnvironmentContext.configure()。该功能在大多数情况下均可正常运行,但默认情况下处于禁用状态,因此可以首先在目标架构上对其进行测试。也可以通过在此处传递可调用项进行自定义;有关详细信息,请参见该功能的文档。
- 更改服务器默认值。如果设置为

compare_server_default=True
,则会发生这种情况
EnvironmentContext.configure()
。此功能在简单情况下效果很好,但不能始终产生准确的结果。Postgresql后端实际上将针对数据库调用“检测到的”和“元数据”值以确定等效性。该功能默认情况下处于关闭状态,因此可以先在目标架构上对其进行测试。像类型比较一样,它也可以通过传递可调用对象进行自定义;有关详细信息,请参见该功能的文档。
自动生成无法检测到:

  • 更改表名。这些将作为两个不同表的添加/删除出现,而应手动编辑为名称更改。
  • 列名称的更改。与表名称更改一样,它们被检测为列添加/删除对,这与名称更改完全不同。
  • 特殊的SQLAlchemy类型,例如

    Enum
    在不ENUM直接支持的后端上生成的-这是因为这种类型在非支持数据库中的表示形式(即CHAR+CHECK约束)可以是任何类型
    CHAR+CHECK
    。对于
    SQLAlchemy
    来说,确定这实际上ENUM只是一个猜测,这通常是一个坏主意。要在此处实现自己的“猜测”功能,请使用该
    sqlalchemy.events.DDLEvents.column_reflect()
    事件来更改为某些列传递的SQLAlchemy类型,并可能
    sqlalchemy.events.DDLEvents.after_parent_attach()
    拦截不需要的CHECK约束。
    自动生成当前无法执行,但最终会检测到:

  • 落地约束添加,删除,像

    CHECK,UNIQUE,FOREIGN KEY
    -这些都还没有实现。现在你会得到内新表,PK和FK约束约束的“降级”到先前存在的表,以及CHECK与SQLAlchemy的“模式”类型产生的约束
    Boolean,Enum

  • 索引添加,删除-尚未实施。
  • 序列添加,删除-尚未实施。
    更新:此最后一个列表中的某些项目在Alembic 0.7.x发行版中受支持。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/385119.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号