在SQLAlchemy中,我已经阅读了如何在声明声明时组合来自不同mixin的__table_args__
。在
Combining Table/Mapper Arguments from Multiple Mixins
我的问题是,这个例子展示了如何在链的末尾(MRO中的最后一个类)实现这一点,但是如果我有这些mixin并希望它出现在MyClientMixin
或{
class LaneCarrierCommitmentSummaryMixin(object):
""" Lane Carrier Commitment Summary.
A base class for LCCS to mixin with a client specific class.
"""
__tablename__ = 'lane_carrier_commitment_summary'
__table_args__ = ((UniqueConstraint(['hashmap_key', 'bow'],
name='uq_lane_carrier_commitment_summary_hashmap_key_bow')),)
class MyClientMixin(object):
""" MyClient Mixin class for providing the ETL schema. """
__table_args__ = {'schema': 'myclient_etl'}
class MyClientLaneCarrierCommitmentSummary(LaneCarrierCommitmentSummaryMixin, DateTrackedMixin, MyClientMixin, Base):
pass
我对这个概念有点纠结。在
这个基类将在所有mixin中搜索要添加的
__table_args__
,然后检查当前类中是否有要添加的__local_table_args__
。这样,__local_table_args__
就不会与声明的attr冲突。基类(cls.mro()
)按相反的顺序进行检查,以便链的较低的mixin被更高的mixin覆盖。在所有的mixin都应该像正常一样定义
__table_args__
,但是继承自Base
的“real”类应该定义__local_table_args__
。在相关问题 更多 >
编程相关推荐