0

我刚刚继承了一个非常旧的应用程序(建立在 Windows 95 上 - 适用于鉴赏家的 Magic7),现在支持最近的 mssql db(2012)。这不是它最初设计的数据库系统,因此它带有一些非常奇怪的表设计。

我正在寻找一个 python ORM 来帮助我轻松地谈论这件事。也就是说,我正在使用一个 ORM,例如,它可以轻松地合并 2 个表,就好像它们是一个表一样。

例如,我可能有表 BILLS 和 BILLS_HISTORY,具有不同的列名,甚至可能是不同的列类型,所以严格来说不同,但语义上包含相同的信息(相同的列数,语义上相同的值)。

我正在寻找一种 ORM,它让我只定义一个 Bill 对象,映射到两个表,并为我提供正确的钩子来决定事情的去向,以及在需要调整时如何编写它们。

另一个例子:说我有一个对象叫好。如果一件商品已完成,则进入 GOODS 表,如果尚未完成,则进入 GOODS_UNFINISHED 表。我正在寻找一个可以读取两个表的商品对象,并根据它来自哪个表来给我一个设置为正确值的完成属性(如果属性设置,则使用钩子将其从一个表更改为另一个表某种程度上来说)。

我对python很好,但我之前没有做过太多这样的数据库工作,所以我的知识有限。我可以并且可能最终会编写自己量身定制的 ORM,但这似乎是浪费时间,因为这些东西将在 6 个月内完全过渡到新的东西时被丢弃。有谁知道具有这种功能的 ORM 吗?我打算学习 ponyORM 和 SQLAlchemy,但我觉得我需要几天时间才能得出结论,它们是否适合我的用例。所以我想我也会问社区......

干杯

4

1 回答 1

0

作为记录,我最终采用了使用 sqlalchemy 的混合方法。

Sqlalchemy 不够灵活,无法以一种非冗长的方式开箱即用地完成我想要的所有事情,但是如果一个人愿意明确地编写所有需要的东西,它就有必要的功能来完成相当多的工作。因此,我编写了一个程序,该程序生成大约 6000 行 sqlalchemy 代码,以便以所需的方式在 sqlalchemy 对象与表之间进行 1 对 1 映射(基本上为 sqla 明确定义所有内容)。Sqlalchemy 在自动加载期间有很多钩子,但我发现很难/不可能利用不同的钩子并同时在每个钩子上设置细粒度的行为,这就是我采用自动显式方式的原因。

在这些 sqlalchemy 对象之上,我编写了包装它们以隐藏“哪个表”流量控制事物的对象。有点杂乱无章,我认为我可以用类型继承和 sqlachemy 对象做一些事情,但是时间在流逝,我只需要在该层中实现很少的功能或可维护性,所以只是向前冲。

于 2018-06-25T20:04:31.917 回答