使用 MySQL REGEXP 通过 Django ORM 过滤字符串
Using MySQL REGEXP to filter string with Django ORM
我有一个包含 FileField
字段的模型,在这个模型中我们有数百万条记录。
class MyModel(models.Model):
media = models.FileField(upload_to=my_function, db_index=True)
...
这些媒体记录存储在数据库中;
- media/some/folder/filename.jpg
- media/filename.jpg
- media/2021091240-10328.JPG
- media/aXay-123.jpeg
- media/some/another/folder/202110-12-12.jpeg
等我需要使用 django orm __iregex
lookup.
查找没有嵌套路径的记录,如 /some/folder/
或 /some/another/folder/
所以,我尝试了类似的方法;
MyModel.objects.filter(media__iregex=r"^media/[0-9a-zA-Z\-][.][a-zA-Z]")
但它不匹配,我不明白如何编写正确的正则表达式 [mysql regexp]。
我如何使用 mysql 正则表达式进行过滤,使用 Django orm 获取只有模式的记录; media/filename.extension
?
您的正则表达式没有量词,因此将为 [0-Aa-zA-Z\-]
字符组选择 恰好一个 字符。
您可以简单地过滤掉至少包含两个斜杠的元素:
MyModel.objects.filter(<strong>media__iregex=r'^media/[^/]+$'</strong>)
我有一个包含 FileField
字段的模型,在这个模型中我们有数百万条记录。
class MyModel(models.Model):
media = models.FileField(upload_to=my_function, db_index=True)
...
这些媒体记录存储在数据库中;
- media/some/folder/filename.jpg
- media/filename.jpg
- media/2021091240-10328.JPG
- media/aXay-123.jpeg
- media/some/another/folder/202110-12-12.jpeg
等我需要使用 django orm __iregex
lookup.
/some/folder/
或 /some/another/folder/
所以,我尝试了类似的方法;
MyModel.objects.filter(media__iregex=r"^media/[0-9a-zA-Z\-][.][a-zA-Z]")
但它不匹配,我不明白如何编写正确的正则表达式 [mysql regexp]。
我如何使用 mysql 正则表达式进行过滤,使用 Django orm 获取只有模式的记录; media/filename.extension
?
您的正则表达式没有量词,因此将为 [0-Aa-zA-Z\-]
字符组选择 恰好一个 字符。
您可以简单地过滤掉至少包含两个斜杠的元素:
MyModel.objects.filter(<strong>media__iregex=r'^media/[^/]+$'</strong>)