Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy线性一对一关系_Python_Sql_Sqlalchemy_One To One - Fatal编程技术网

Python SQLAlchemy线性一对一关系

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

我有两个类分别映射到两个表

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.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进行这种映射?您可以自由编写自己的构造/包装来隐藏所有的
复杂性。