首页 > 解决方案 > 从 SQLAlchemy 上下文管理器返回一个值

问题描述

我正在尝试从我的上下文管理器返回我的 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 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))

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

谢谢。

标签: pythonpython-3.xsqlalchemycontextmanager

解决方案


您忘记了return以下查询的结果go()

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

推荐阅读