从SQLAlchemy上下文管理器返回值

时间:2018-10-17 19:44:21

标签: python python-3.x sqlalchemy contextmanager

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

所有这三个摘要均来自不同的文件,并且我的导入设置正确。没有编译时或运行时异常。看来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一起使用。这是范围问题吗?还是我只需要以某种方式访问​​返回值?

谢谢。

1 个答案:

答案 0 :(得分:1)

您忘了return的{​​{1}}查询结果:

go()