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 可以对数据库进行非破坏性更改,将当前模型与数据库模式进行比较吗?的主要内容,如果未能解决你的问题,请参考以下文章