【发布时间】:2017-12-01 18:09:21
【问题描述】:
使用any() method 我可以过滤这样的查询:
session.query(Result).filter(Result.related_images.any(url='result1_1512149119.jpg'))
这是过滤与 Result 类相关的图像,该类与由关联对象 ResultImages 定义的 Image 对象有关系,这样 session.query(Result.related_images).all() 将返回所有已指定为的图像与Result 条目相关。
从上面进行第一次查询时,我得到以下输出:
result1_1512149091.jpg
result1_1512149094.jpg
result1_1512149097.jpg
result1_1512149100.jpg
result1_1512149103.jpg
result1_1512149105.jpg
result1_1512149109.jpg
result1_1512149111.jpg
result1_1512149113.jpg
result1_1512149117.jpg
result1_1512149119.jpg
result1_1512149122.jpg
result1_1512149125.jpg
result1_1512149128.jpg
在我的数据库中,有很多图片有很多结果,比如下面的查询:
session.query(Result).filter(Result.related_images.any(url='result2_1512149119.jpg'))
将返回以下数据:
result2_1512149091.jpg
result2_1512149094.jpg
result2_1512149097.jpg
result2_1512149100.jpg
result2_1512149103.jpg
result2_1512149105.jpg
result2_1512149109.jpg
result2_1512149111.jpg
result2_1512149113.jpg
result2_1512149117.jpg
result2_1512149119.jpg
result2_1512149122.jpg
result2_1512149125.jpg
result2_1512149128.jpg
我已经阅读了与 any() 函数相关的文档,但我仍然不清楚如何利用它来实现更细微的方法(或者是否可能)。例如,对于我正在做的查询类型,我只会事先知道文件名的result1 子字符串。
我不明白为什么由result1_1512149091.jpg 子字符串过滤的查询也会返回result1_1512149094.jpg。对于我的特殊用途,这是理想的,但我不明白为什么它会以这种方式工作。例如,我希望通过.any('result1') 进行过滤也会返回result1 图像的完整列表,但它什么也不返回。
我最终想做的是使用正则表达式按关联对象的属性值进行过滤,这样我就可以做到.any(url={{REGEX EXPRESSION}})。有这种可能吗?
【问题讨论】:
标签: python sqlalchemy many-to-many model-associations