如何避免使用sqlalchemy声明的复杂元类

时间:2013-02-14 10:16:43

标签: python sqlalchemy

我刚刚注意到在a stackoverflow reply sqlalchemy的创建者Mike Bayer(zzzeek)说“简单用例的Declarative不需要自定义元类,而且对于硬用例也几乎不需要。 Mixins +定制基地应该能够做到的一切。“这使我希望我在sqlalchemy中使用declarative_base的自定义元类进行的操作可以使用mixins + custom bases来完成。但是,我无法使其发挥作用。我非常感谢任何提示!

我有一个mixin ConciseRelationshipMixin,可以使用简洁的语法创建关系。它使用如下:

class Eggs(ConciseRelationshipMixin, OtherMixin1, OtherMixin2):
    pass

Spam = declarative_base(cls=Eggs)

class Ham(Spam):
    some_column = Column(Integer)
    crispy_bacon = ConciseRelationship(Bacon)

这会在Ham.__table__中创建一个额外的列来保存关系的FK,以及名称Ham.bar下的关系本身,使用项目特定的约定列的名称和primaryjoin。我非常喜欢这个mixin,因为它使Ham的定义看起来非常清晰和整洁。

我在没有使用元类的情况下无法实现此功能的原因是我尝试将分配crispy_bacon = ...转换为两个分配column_for_crispy_bacon = Column(...)和{{1} },我看不到任何其他方法。

我也愿意接受“你不应该做这种事,因为......”的回复。

0 个答案:

没有答案