0

我在 SQLAlchemy 中的会话有问题,当我在数据库中添加一行时没问题,但是如果我想在不关闭我的应用程序的情况下添加另一行,它不会添加

这是我的模型中的功能:

def add(self,name):
    self.slot_name = name
    our_slot = self.session_.query(Slot).filter_by(slot_name = str(self.slot_name)).first()
    if our_slot:
        return 0
    else:
        self.session_.add(self)
        self.session_.commit()
        return 1
4

1 回答 1

0

问题是您提交了会话。提交会话后,将其关闭。要么在完成添加后提交,要么在每次提交后打开一个新会话。也看看Session.commit()。您可能应该在SQLAlchemy 的文档中阅读有关会话的内容。

此外,建议您这样做:

def add(self,name):
    self.slot_name = name
    try:
        our_slot = self.session_.query(Slot)\
        .filter_by(slot_name = str(self.slot_name)).one()
        self.session_.add(self)
        return 1
    except NoResultFound:
        return 0

当然,这仅在您期望只有一个结果时才有效。引发异常并捕获它们而不是弥补条件被认为是一种很好的做法。

于 2013-03-14T15:02:15.827 回答