[PYTHON] Faites une recherche ambiguë pour mysql dans Django

À propos de la recherche floue de mysql

https://www.softel.co.jp/blogs/tech/archives/1877 Pour la requête, je me suis référé ici.

Comment écrire en Django

Utilisez ʻextra car les requêtes spéciales ne peuvent pas être effectuées avec filtre`

    def get_ambiguous_queryset(self, queryset, value, columns):
        """
Renvoie un jeu de requêtes pour une recherche floue
        :param queryset:
        :param value:
        :param columns:
        :return:
        """

        query_text = ''
        count = 0
        for column in columns:
            if query_text != '':
                query_text += ' OR '
            temp_value = value
            if isinstance(value, list):
                if len(value) > count:
                    temp_value = value[count]
                else:
                    temp_value = value[0]
            query_text += f"CONVERT({column} USING utf8) COLLATE utf8_unicode_ci LIKE %s"
            temp_value = temp_value.replace('%', r'\%%').replace('_', r'\_')
            params.append(f'%{temp_value}%')
            count += 1
        if query_add:
            query_text += query_add
        return queryset.extra(where=[query_text], params=params)

Comment utiliser

#Transmettez le jeu de requêtes, la valeur à rechercher et la colonne à rechercher
self.get_ambiguous_queryset(queryset, value, ['name', 'code', 'description'])

#Vous pouvez également transmettre la valeur que vous souhaitez rechercher dans un tableau(Il est lié à la colonne à rechercher)
self.get_ambiguous_queryset(queryset, [value, self.convert_tel(value)], ['name', 'tel'])

Soyez prudent lorsque la jointure est requise

#Modèle NG (la boutique n'est pas jointe et une erreur se produit)
self.get_ambiguous_queryset(queryset, value, ['shop.name', 'shop.code'])

#Motif OK (joint si shop est écrit dans le filtre)
self.get_ambiguous_queryset(queryset, value, ['shop.name', 'shop.code']).filter(shop__name__isnull=False)

Impressions

Même si je sais l'écrire dans une requête, je me demande toujours comment l'écrire dans Django

Recommended Posts

Faites une recherche ambiguë pour mysql dans Django
Rechercher des chaînes dans les fichiers
Instruction Loop For inversée dans un fichier HTML sur Django
recherche django
Paramètre d'attribut de même site du cookie dans Django
(Remarque) Ordre de recherche des fichiers modèles dans Django
Obtenir les paramètres de requête pour les requêtes GET avec Django
Comment faire des événements envoyés par le serveur dans Django
Recherchez vous-même à partir des méthodes du modèle de Django
[Introduction pour les débutants] Manipuler MySQL avec Python
Prise en charge de l'internationalisation avec Django 1.9
Formulaire à Django
Procédure de création d'une application avec Django avec Pycharm ~ Préparation ~
Créez un environnement interactif pour l'apprentissage automatique avec Python
Créez un conteneur sans privilège pouvant utiliser des GPU NVIDIA dans LXC
Notes d'apprentissage pour la fonction migrations dans le framework Django (3)
Notes d'apprentissage pour la fonction migrations dans le framework Django (1)
Recherche récursive de fichiers et de répertoires en Python et sortie