从 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) ...
# ^^^
我正在尝试从我的上下文管理器中 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) ...
# ^^^