gpt4 book ai didi

python - SQLAlchemy 中的一对一 self 关系

转载 作者:太空狗 更新时间:2023-10-30 00:41:27 24 4
gpt4 key购买 nike

我需要创建链表的 SQLAlchemy 版本。它实际上比这更复杂,但归结为:

我需要一个类中的一对一、 self 参照、双向关系。每个元素可能只有一个父元素或根本没有父元素,并且最多有一个子元素。

我简化了我的类(class),看起来像这样:

class Node(declarative_base()):
__tablename__ = 'nodes'

id = Column(Integer, Sequence('nodes_id_seq'), primary_key=True, autoincrement=True)
value = Column(Integer)
prev_node_id = Column(Integer, ForeignKey('nodes.id'))
next = relationship('Node', uselist=False, backref=backref('prev', uselist=False))

但是,当我尝试创建一个时,它抛出一个异常:

>>> Node()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "<string>", line 2, in __init__
File "sqlalchemy\orm\instrumentation.py", line 309, in _new_state_if_none
state = self._state_constructor(instance, self)

[...]

File "sqlalchemy\orm\properties.py", line 1418, in _generate_backref
self._add_reverse_property(self.back_populates)
File "sqlalchemy\orm\properties.py", line 871, in _add_reverse_property
% (other, self, self.direction))
ArgumentError: Node.next and back-reference Node.prev are both of the same direction <symbol 'ONETOMANY>. Did you mean to set remote_side on the many-to-one side ?

我在这里错过了什么?谷歌搜索让我无处可去......:/

最佳答案

作为异常(exception),您需要为关系设置 remote_side 关键字。否则sqlalchemy无法选择引用方向。

class Node(declarative_base()):
...
prev = relationship(
'Node',
uselist=False,
remote_side=[id],
backref=backref('next', uselist=False)
)

关于python - SQLAlchemy 中的一对一 self 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12872873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com