SQLAlchemy 可以对数据库进行非破坏性更改,将当前模型与数据库模式进行比较吗?

Posted

技术标签:

【中文标题】SQLAlchemy 可以对数据库进行非破坏性更改,将当前模型与数据库模式进行比较吗?【英文标题】:Can SQLAlchemy do a non-destructive alter of the db comparing the current model with db schema? 【发布时间】:2011-02-17 23:44:56 【问题描述】:

基本上我正在寻找一个等效的 DataMapper.auto_upgrade!来自 Ruby 世界。

换句话说:

    更换型号 运行一些魔法 -> 调查并更改当前数据库架构以反映模型 利润

当然,在某些情况下,这种更改不可能是非破坏性的,例如。当您删除某些属性时。但我不是指这种情况。我正在寻找一种通用的解决方案,它在快速原型设计和更改架构时不会受到影响。

TIA

【问题讨论】:

【参考方案1】:

Sqlalchemy-migrate (http://packages.python.org/sqlalchemy-migrate/) 旨在帮助执行这些类型的操作。

【讨论】:

SQLAlchemy-migrate 的问题在于它引入了迁移(将您从数据映射器模式切换到更像活动记录模式的模式)并以自己的格式存储元数据,因此您注定要使用这种机制更进一步。我的观点是没有必要,因为元数据 is 已经在数据库中,并且对于几个领先的 SQL 后端来说,很容易获得这些信息。这就是 DataMapper 所做的。另外我的观点不是学术性的,数据库架构将被其他方更改,迁移是不行的。 出于多种原因,我对 sqlalchemy-migrate 并不着迷。除了你的之外,它是一个非常泄漏的抽象,它不支持 MS SQL。我可以通过 MetaData 和 Inspector 类获得我想要的大部分信息。我目前的一个差距是获取有关信息和创建视图。在 Inspector 中,您可以通过 SQL 来创建视图,但我宁愿以不那么原始的方式向我展示视图的结构。

以上是关于SQLAlchemy 可以对数据库进行非破坏性更改,将当前模型与数据库模式进行比较吗?的主要内容,如果未能解决你的问题,请参考以下文章

可以将 SQLAlchemy 配置为非阻塞吗?

SQLAlchemy 如何跟踪数据库更改?

Python3:sqlalchemy对mysql数据库操作,非sql语句

漏洞检测的几种方法

SQLAlchemy 事件可以用于更新非规范化数据缓存吗?

管理将破坏性数据库更改迁移到由同一应用程序的旧版本共享的数据库