使用^{
session.query(Result).filter(Result.related_images.any(url='result1_1512149119.jpg'))
这是过滤与Result
类相关的图像,该类与由关联对象ResultImages
定义的Image
对象有关系,这样session.query(Result.related_images).all()
将返回指定为与Result
项相关的所有图像。在
从上面进行第一次查询时,我得到以下输出:
^{pr2}$在我的数据库中,有许多图像可以得到许多结果,因此下面的查询:
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
图像的完整列表,但它什么也不返回。在
我最终想做的是使用regex表达式按关联对象的属性值进行过滤,这样我就可以.any(url={{REGEX EXPRESSION}})
。有可能吗?在
当然是。可以将任何SQL表达式传递给^{} 作为条件。例如,一个LIKE表达式,使用^{} 、^{} 、^{} 本身,或者您所拥有的:
使用regexp通常有点特定于DB,而且您在问题中忽略了这一点信息,所以我在回答中尽量避免使用它。但是你可以用和这里类似的表达一样的方式。在
相关问题 更多 >
编程相关推荐