【问题标题】:Python adding utility functions to SqlAlchemy Entity classesPython 将实用程序函数添加到 SqlAlchemy 实体类
【发布时间】:2014-01-03 06:48:21
【问题描述】:

在我的 Python 包中,我定义了一些 Sqlalchemy 实体类。所有类都是使用 ORM 声明性技术定义的。大多数类使用普通属性和关系直接映射到数据库表(以 1:1 的方式),只有几个类使用简单的 hybrid_attributes。

当您查看其他一些软件包(例如 Elixir 或 Camelot)时,它们具有补充的 sqlalchemy 功能,这些功能提供方便的操作作为附加到每个实体实例的额外属性。例如,to_dict() 将 Entity 实例复制到字典中,from_dict() 尝试从字典中创建新的 Entity 实例。

最简单的方法是什么?手动将这些函数添加到我自己的实体类中?寻找对最常见用途的警告最少的通用方法。


使用元数据/映射器找到合适的列键集? (对于 to_dict)

类方法?静态方法?

子类 declarative_base 来自sqlalchemy.ext.declarative

mixin 呢?

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    我在挖掘 Elixir 的源代码,发现他们是如何实现这些帮助程序的......

    这些函数被定义为父基类上的常规实例方法,该基类旨在被子类化,尽管 elixir Entity 使用元类。

    从那个实现中,我想我可以从 sqlalchemy 的内置 Base 子类化声明类,然后简单地将这些方法添加到我的自定义类中。长生不老药功能是否会按原样工作,我还没有测试过。

    两个函数都使用:

    mapper = sqlalchemy.orm.object_mapper(self)
    

    然后使用该映射器对象来访问所有内容。在 SA-0.8 及更高版本中,object_mapper 是否仍然是推荐的方法?有什么我应该知道的注意事项吗?

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 1970-01-01
      • 2021-11-17
      • 2014-04-09
      • 1970-01-01
      • 2023-02-10
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多