我有两个类分别映射到两个表。
实施例
Obj 1: ID (PK), KEY (String(20))
Obj 2: ID (PK), obj_1_id (FK), value (String(20))
我希望能够执行obj_1.value = *val*
,其中 val 存储在secon'd表的相应列而不是 obj_1.value。 value = val `。
我想要的是不一对一(对象HAS对象),而是将对象的列映射到不同的表。
以下是我尝试过的(在文档之后)并且它不起作用,因为它创建obj1.value.value = ..
而不是直接列映射
我尝试了什么:
class Obj1(Base):
__tablename__ == ...
id = ..
key = ..
value = relationship("Obj2", uselist=False, backref="obj1")
class Obj2(Base):
__tablename__ == ...
id = .. # PK
obj_1_id = .. # FK
value = ...
答案 0 :(得分:1)
为什么不包装python属性:
class Obj1(Base):
__tablename__ = 'obj1'
id = Column(Integer, primary_key=True)
key = Column(String(20))
_value_rel = relationship("Obj2", uselist=False, backref="obj1")
@property
def value(self):
return self._value_rel and self._value_rel.value
@value.setter
def value(self, value):
if value is None:
self._value_rel = None
elif self._value_rel is None:
self._value_rel = Obj2(value=value)
else:
self._value_rel.value = value