避免在 SQLAlchemy 中解包模式

Avoiding Unpacking Patterns in SQLAlchemy

在我的 SQLAlchemy 包装器中,我倾向于包含冗余代码块,这些代码块涉及关于是否解压缩代码的重复逻辑。

例如

  def seek_entry(self, filter, model, multiple=False, unpack=False):
    if multiple:
      if unpack:
        return self.session.query(model).filter_by(**filter).all()
      else:
        return self.session.query(model).filter_by(filter).all()
    else:
      if unpack:
        return self.session.query(model).filter_by(**filter).first()
      else:
        return self.session.query(model).filter_by(filter).first()

有没有办法不用检查 unpackmultiple 而是让这段代码更简洁?

您可以利用 filter() method if the given filter isn't dictionary. See source code 查看 filter_by() 是如何调用 filter() 方法的。