Отношения SqlAlchemy расширяют обновления только некоторых из указанных записей - PullRequest
0 голосов
/ 09 января 2020

Работа со следующими моделями

Base = declarative_base()

class NodeGroup(Base):
    __tablename__ = "node_groups"

    id = Column(BigInteger, primary_key=True, autoincrement=False)
    # columns definition

class Node(Base):
    id = Column(BigInteger, primary_key=True)
    # columns definition
    group_id = Column(BigInteger, ForeignKey('node_groups.id', ondelete='SET NULL'), nullable=True)

    group = relationship(NodeGroup, backref=backref('nodes'))

Возникает следующая проблема при перемещении узлов одной группы в другую с использованием приведенного ниже кода.

g = session.query(NodeGroup).order_by(NodeGroup.id).first()
g2 = session.query(NodeGroup).order_by(NodeGroup.id.desc()).first()

print('Group 1', g.nodes, 'Group 2', g2.nodes)
g.nodes.extend(g2.nodes)
print('Group 1', g.nodes, 'Group 2', g2.nodes)

(«Группа 1», [], «Группа 2», [Узел 3, Узел 8, Узел 1, Узел 2, Узел 12])

(«Группа 1», [Узел 3, Узел 1, Узел 12], «Группа 2», [Узел 8, Узел 2])

Передаются только 3 из 5 узлов

Тот же сценарий, но с использованием перечисленных ниже передач все узлы

g.nodes.extend(list(g2.nodes))

(«Группа 1», [], «Группа 2», [Узел 3, Узел 8, Узел 1, Узел 2, Узел 12])

(«Группа 1», [Узел 3, Узел 8, Узел 1, Узел 2, Узел 12], «Группа 2», [])

Итак, мой вопрос в чем причина это поведение? Ожидается ли это, или я что-то не так делаю, и есть ли лучший способ добиться этого?

Редактировать: sqlalchemy версия 1.2.6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...