#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 django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. 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.