寻找特定的 python ORM

Posted

技术标签:

【中文标题】寻找特定的 python ORM【英文标题】:Looking for a particular python ORM 【发布时间】:2018-03-16 16:19:40 【问题描述】:

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

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

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

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

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

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

干杯

【问题讨论】:

docs.sqlalchemy.org/en/latest/orm/nonstandard_mappings.html 【参考方案1】:

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

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

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

【讨论】:

以上是关于寻找特定的 python ORM的主要内容,如果未能解决你的问题,请参考以下文章

寻找特定的 python ORM

在python中寻找具有特定条件的数字

Python 寻找文件夹里以特定格式结尾的文件

在特定日期循环 Dataframe Pandas Python

Python 聚类算法

如何使用python中的平移矩阵将小图像的特定坐标放置到大图像的特定坐标