使用 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)
    ...

这些媒体记录存储在数据库中;

等我需要使用 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>)