InvalidRequestError:对象“”已附加到会话

2024-05-14 23:02:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到:

sqlalchemy.exc.InvalidRequestError: Object '<DBEdge at 0x103c4a190>' is already attached to session '1' (this is '2')

在这条线上

session.add(edge)

当我试着运行这个:

  def findOrCreateEdge(self,user1,user2): #user1 is followed by user2
    if user1.id>user2.id:
      user1, user2 = user2, user1
      kind = 2
    else:
      kind = 1
    edge = self.findEdge(user1,user2)
    if edge:
      if edge.kind==1 and kind==2:
        edge.kind = 3
      if edge.kind==2 and kind==1:
        edge.kind = 3
      return edge
    else:
      edge = DBEdge(user1,user2)
      edge.kind = kind
      user1.edge_count = user1.edge_count + 1
      user2.edge_count = user2.edge_count + 1
      #session.save(edge) # we don't flush edges here, because it gives us a huge speedup to do a bunch at once then flush.
      try:
        session.add(edge)
        session.commit()
      except:
        session = Session()
        session.add(edge)
        session.commit()
      return edge

Tags: toselfaddidifissessioncount
1条回答
网友
1楼 · 发布于 2024-05-14 23:02:07

问题在于将边添加两次,一次添加到第一个会话,然后在出现异常时添加到第二个会话。我不知道您到底想在这里实现什么,但是与其粗暴地将边缘塞进一个新会话,不如您调查错误并解决问题。或者,您可能希望回滚上一个会话并重新启动它,然后将边添加到该会话中。

在已经有会话的情况下创建一个新会话几乎总是一个错误(除非上下文本身发生了更改,但这里似乎不是这样)。

相关问题 更多 >

    热门问题