我有一个many to many表,正在尝试运行 2 个查询,将其中一个表分成两个列表 - 那些have an item和those that don't.
我有一个名为的表items和一个名为lists多对多关系的表。下面显示的函数是项目模型类的一部分。当一个项目 id 被传递到函数中时,它检查所有记录的关联表,然后过滤它自己的值。我编写了一个测试函数,它创建了 4 个列表并向其中两个列表添加了 1 个项目。
然后测试调用这两个函数。第一个函数正确返回它添加到的 2 个列表。第二个测试错误地返回所有 4 个列表。这两个函数之间的唯一区别是==vs !=。这意味着我的非平等条件没有触发。
Flask搭配使用Flask-SQLAlchemy
第一个查询检查equality按预期工作,但not equal查询根本不起作用。
我已经尝试过 SQLAlchemy 文档,尝试过使用!=, not_,is not但没有任何运气。
谷歌搜索也不会产生任何有用的结果。
在 SQLITE3 中这是有效的,这正是我试图用 flask-SQLAlchemy 完成的:
select * from List
left join items_lists
on items_lists.list_id = List.id
WHERE items_lists.item_id is not item.id;
这是我的代码,在此先感谢您的指导。
def in_list(self):
return List.query.join(
items_lists, (items_lists.c.list_id == list.id)
).filter(
items_lists.c.item_id == self.id
)
def not_in_list(self):
return List.query.join(
items_lists, (items_lists.c.list_id == list.id)
).filter(
items_lists.c.item_id != self.id
)
我正在使用 Python 的 unittest 进行测试 - 这是检查条件的代码。测试失败self.assertEqual(nm1, [l2, l4])而不是看到[l2, l4]结果,我得到[l1,l2,l3,l4]- 根据测试条件,item1 -i1在列表中 -[l1, l3]所以第二个查询条件不起作用。
其他不起作用的东西:
.filter(
items_lists.c.list_id == not_(self.id)
)
.filter(
items_lists.c.list_id == ~self.id
)
这将返回一个空列表,而不是让 item 不是成员的两个列表。
蝴蝶刀刀
牛魔王的故事
当年话下
随时随地看视频慕课网APP
相关分类