从 SQLAlchemy 上下文管理器返回一个值

Returning a value from a SQLAlchemy context manager

我正在尝试从我的上下文管理器中 return 我的 SELECT 查询的值。但是,return 没有任何响应。如何从我的上下文 manager/session 中 return 我的 select 查询的结果?

@contextmanager
def aperio_session_scope():
  """Provide a transactional scope around a series of operations."""
  session = AperioSession()
  try:
    yield session
    session.commit()
  except:
    session.rollback()
    raise
  finally:
    session.close()

此外,查询 class 如下所示:

class AperioSlidesAfterDate(object):
  def go(self, session):
    session.query(Slide).join(Image).filter(Image.scandate > '2018-08-01 00:00:00', Slide.barcodeid.isnot(None))

我运行查询如下:

  with aperio_session_scope() as session:
    slides = AperioSlidesAfterDate().go(session)

所有这 3 个片段都来自不同的文件,我的导入设置正确。没有编译时间或 运行 时间异常。似乎slides的值总是None。我错过了什么吗?我遵循了 SQLAlchemy 文档中的示例。

如果我这样做:

with aperio_session_scope() as session:
    slides = session.query(Slide).join(Image).filter(
        Image.scandate > '2018-08-01 00:00:00', Slide.barcodeid.isnot(None))

我得到了结果,但我想尝试并按照文档中的预期将会话对象与 go 一起使用。这是范围界定问题吗?或者我是否只需要以某种方式访问​​ return 值(如果可能)?

谢谢。

您忘记了 return 来自 go() 的查询结果:

class AperioSlidesAfterDate(object):
  def go(self, session):
    return session.query(Slide).join(Image) ...
    # ^^^