J'utilise le schéma de type MySQLicious décrit here pour un système de marquage simple . J'ai lu quelques implémentations alternatives du schéma de marquage dans 4 threads SO différents, et cela répond mieux à mes besoins.
Une collection d'entrées porte les balises "pomme banane orange" et "citron fraise banane" et j'essaie de trouver l'instruction équivalente Elixir/SQLAlchemy de
SELECT * FROM table WHERE tags LIKE "%banana%";
Je n'ai pas été capable de trouver un tel moyen de structurer une commande Class.query.filter/filter_by (), et je ne vois pas de méthode similaire dans la documentation de l'un ou l'autre module. Y a-t-il un moyen simple de faire cela? Ou devrais-je simplement utiliser du SQL brut.
Question supplémentaire: Un inconvénient du schéma MySQLicious est le cas où je souhaiterai peut-être rechercher "% Apple%" mais avoir "ananas" renvoyé. Existe-t-il un moyen très efficace de traiter ce cas de test? Ou devrais-je simplement inclure un espace de début dans chaque requête?
n.B: Pour ceux qui s’en soucient, c’est ma première expérience avec les bases de données, il est donc possible que je passe à côté des avantages fondamentaux du schéma mentionné dans d’autres discussions. Mon application permet de consigner une phrase ou deux sur une tâche terminée, avec des colonnes [TaskID, Balises, Notes, Heure de début, Heure d'arrêt, TimeTaken], un peu comme un simple journal. Principalement à des fins de tutorat. Je veux pouvoir rechercher par balises individuelles pour savoir approximativement combien de temps je passe sur une tâche donnée.
Chaque colonne a une méthode .like, qui peut être utilisée comme clause de filtre.
>>> Note.query.filter(Note.message.like("%somestr%")).all()
[]
En ajoutant à la réponse ci-dessus, quiconque cherche une solution, vous pouvez également essayer l'opérateur "correspondance" au lieu de "comme". Je ne veux pas être partial, mais cela a parfaitement fonctionné pour moi dans Postgresql.
Note.query.filter(Note.message.match("%somestr%")).all()
Il hérite des fonctions de base de données telles que CONTIENT et MATCH. Cependant, il n'est pas disponible dans SQLite.
Pour plus d'informations, allez Opérateurs de filtres communs
essayez ce code
output = dbsession.query(<model_class>).filter(<model_calss>.email.ilike('%' + < email > + '%'))
Utiliser PostgreSQL like
( voir réponse acceptée ci-dessus ) ne m'a pas fonctionné, bien que les cas soient identiques, mais ilike
(cas i nsensisitive like) fonctionne.