Python SQLAlchemy线性一对一关系
我有两个类分别映射到两个表 Ex:Python SQLAlchemy线性一对一关系,python,sql,sqlalchemy,one-to-one,Python,Sql,Sqlalchemy,One To One,我有两个类分别映射到两个表 Ex: Obj 1:ID(主键),KEY(字符串(20)) Obj 2:ID(PK)、Obj_1_ID(FK)、value(String(20)) 我希望能够执行obj_1.value=*val*,从而将val存储在第二个表的相应列中,,而不是obj_1.value.value=val` 如何创建这样的关系,将其分散/映射到两个表的列 我想要的不是一对一(对象有对象),而是将对象的列映射到不同的表 以下是我尝试过的(在文档之后),但它不起作用,因为它创建了obj1
Obj 1:ID(主键),KEY(字符串(20))
Obj 2:ID(PK)、Obj_1_ID(FK)、value(String(20))
我希望能够执行obj_1.value=*val*
,从而将val存储在第二个表的相应列中,,而不是obj_1.value.value=val`
- 如何创建这样的关系,将其分散/映射到两个表的列
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 = ...
为什么不直接包装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
感谢您提供此解决方案。它解决了问题,但感觉有点复杂。是否应该有(或者没有)一种更简单的方法来使用SA进行这种映射?您可以自由编写自己的构造/包装来隐藏所有的
复杂性。