在我的Python包中,我定义了一个Sqlalchemy实体类。所有类都使用ORM声明性技术定义。大多数类使用普通的属性和关系直接映射到数据库表(以1:1的方式),只有几个类使用简单的hybrid_attributes。
当您查看其他一些软件包(如Elixir或Camelot)时,它们具有补充的sqlalchemy功能,这些功能提供便利操作,作为附加到每个Entity实例的额外属性。例如,to_dict()
将实体实例复制到字典和from_dict()
,它试图从字典中创建新的实体实例。
将最简单的方法手动添加到我自己的Entity类中的方法是什么?寻找通用方法,这些方法对于最常见的用途具有最少的警告。
使用元数据/映射器查找适当的列键集? (for to_dict)
班级方法?静态方法?
来自sqlalchemy.ext.declarative
的子类declarative_base?
mixins怎么样?
答案 0 :(得分:0)
我正在挖掘Elixir的来源,我发现他们是如何实施这些帮助的......
虽然elixir Entity
使用了元类,但函数被定义为父基类上的常规实例方法,虽然elixir Base
使用了元类。
从该实现中,我认为我可以从sqlalchemy的内置mapper = sqlalchemy.orm.object_mapper(self)
继承子类,用于声明性类,只需将这些方法添加到我的customclass中。无论灵丹妙药的功能是否正常,我还没有测试过。
这些功能都使用:
{{1}}
然后使用该映射器对象访问所有内容。在SA-0.8及更高版本中,object_mapper仍然是推荐的方法吗?我应该知道的任何警告?