我正在尝试创建一个过滤器管理器来包装SQLAlchemy应用中的过滤器调用。但是,筛选器管理器不返回任何值。而且,它似乎甚至没有运行SQL语句。我的会话是如何申报的?
class FilterManager():
def __init__(self):
self.page = 1
self.pageLength = 5
Logger.info('Filter: Filter Manager Created')
def SimpleFilter(self):
limit = self.pageLength
offset = ((self.page - 1) * self.pageLength) + 1
session = Session()
return session.query(KeyAction).order_by(KeyAction.id)[limit:offset]
session.close()
然后我添加了一个成功的关键动作:
session = Session()
ka = KeyAction(name='Key Action 1', description = 'Test', custom = False)
session.add(ka)
session.commit()
session.close()
我的单元测试在相同的断言中都失败了:
results = filter.SimpleFilter()
self.assertEquals(len(results), 1)
说结果的长度是0,而不是1。
我还尝试在全球范围内声明单个会话,但这也存在同样的问题。任何帮助将不胜感激!
亚历
------------------编辑------------------
根据下面的第一个答案,我做了以下更新:
def SimpleFilter(self):
limit = ((self.page - 1) * self.pageLength)
offset = self.pageLength + ((self.page - 1) * self.pageLength)
session = Session()
results = session.query(KeyAction).order_by(KeyAction.id)[limit:offset]
session.close()
return results
现在它根据上次运行脚本时提交的内容返回结果(第一次返回0结果,第二次返回3次,之后每次返回5次)
快速注意,我确实在会话工厂声明之后将会话声明移动到示例here。
为什么我不能读取此会话中写入数据库的数据?
答案 0 :(得分:1)
这可能是由您的LIMIT / OFFSET引起的。带[]
的切片表示法不允许您定义LIMIT和OFFSET值。相反,你必须提供一个带有开始和结束的Python风格的范围,例如:
[10:20]
这将返回10个项目(10到19,从零开始)。
此外,永远不会执行return
之后的语句。