#29702: QuerySet database pattern regexp support
-----------------------------------------+------------------------
Reporter: ddalex | Owner: nobody
Type: Uncategorized | Status: new
Component: Uncategorized | Version: 2.1
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-----------------------------------------+------------------------
Currently there is no API to match a string against regex patterns stored
in a database. Proposing an API to enable this functionality.
== Current regex API
The current set of QuerySet APIs supports regexp functions (i.e `__regex`
and `__iregex`) support passing in a pattern that is matched against a
field in the database. E.g. for a database `value_field=CharField()`
containing the `foo`, `bar` and `for`, the queryset API
`Q(value__regexp='.o.')` will match `foo` and `for` through a `value_field
REGEX 'o'` WHERE clause.
== New API proposal
What is missing is an API to allow the regex (proposing `__revregex` and
`__irevregex`) pattern to be stored in the field and to apply a WHERE
clause on a string that returns pattern-matching entries in the database.
E.G have the database field `pattern=CharField()` that stores a regex
pattern, with the values '.o.' and '.*'.
The queryset statement `Q(pattern__revregex='foo')` will match both
values, while the pattern `Q(pattern__revregex)='bar')` will match only
the `.*` value.
== Example
Currently I'm implementing this with an `extra()` query:
{{{
class DisplayClassifiers(models.Model):
regex_pattern = models.CharField(max_length=10, null=False)
....
# return my classifiers that match the string supplied
DisplayClassifiers.objects.extra(where=["'{0}' REGEXP
regex_pattern".format(regex_pattern.replace("'", ""))])
}}}
This generates this SQL:
{{{
SELECT .... FROM `mainapp_displayclassifier` WHERE ('foo-bar-go' REGEXP
regex_pattern)
}}}
Works as expected with mariadb 10.0.31
--
Ticket URL: <https://code.djangoproject.com/ticket/29702>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/049.5eb706db39e0643ab76f4b0fa9f44a31%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.