使用SQLAlchemy,如何根据关联对象属性和Regex进行过滤?

2024-04-18 20:50:20 发布

您现在位置:Python中文网/ 问答频道 /正文

使用^{} method我可以像这样过滤查询:

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}})。有可能吗?在


Tags: 对象字符串图像urlsessionanyresultfilter
1条回答
网友
1楼 · 发布于 2024-04-18 20:50:20

What I'd ultimately like to do is filter by an Association Object's attribute values using a regex expression, such that I could do .any(url={{REGEX EXPRESSION}}). Is this a possibility?

当然是。可以将任何SQL表达式传递给^{}作为条件。例如,一个LIKE表达式,使用^{}^{}^{}本身,或者您所拥有的:

session.query(Result).\
    filter(Result.related_images.any(
        Image.url.startswith('result1')))

使用regexp通常有点特定于DB,而且您在问题中忽略了这一点信息,所以我在回答中尽量避免使用它。但是你可以用和这里类似的表达一样的方式。在

相关问题 更多 >