Add exists filter syntax
Les mainteneurs répondent en général sous 2 jours
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 42/100
Piste de recherche
Commencez par l’issue connexe #385 et comparez la syntaxe de filtre proposée avec les exemples SQL EXISTS et JOIN de cette issue. Clarifiez où __exists doit se trouver et quelle devrait être sa sémantique ; le travail est considéré comme terminé lorsqu’une syntaxe acceptée génère un filtrage basé sur l’existence sans nécessiter distinct().
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Is your feature request related to a problem? Please describe.
When querying for the existence of a one-to-many related model with certain values it one of its fields, the .distinct() method is required to prevent duplicates. This is not the most efficient query.
Contrived example: I have to do this to find all phone numbers of users that work at the north pole without duplicates:
PhoneNumber.filter(user__company__location='North Pole').distinct()
According to ChatGPT,
SELECT m.*
FROM model m
WHERE EXISTS (
SELECT 1
FROM user u
JOIN company c ON u.company_id = c.id
WHERE u.id = m.user_id
AND c.location = 'North Pole'
);
is preferable over
SELECT DISTINCT m.*
FROM model m
LEFT OUTER JOIN user u ON m.user_id = u.id
LEFT OUTER JOIN company c ON u.company_id = c.id
WHERE c.location = 'North Pole';
Why this is better (copied from ChatGPT):
EXISTSchecks for existence rather than joining, so no duplicates.- Often more efficient, since the DB can stop searching after the first match.
- Cleaner semantics: “Does this related row exist?” rather than “Give me all the related rows, then deduplicate.”
Describe the solution you'd like
PhoneNumber.filter(user__company__exists__location='North Pole')
Describe alternatives you've considered
Could be variations on the placement of __exists in the query. I realize the exact semantics could be a bit unclear.
Additional context
Related #385
- Langage dominant
- Python
- Étoiles
- 5.6k
- Forks
- 523
- Merge moyen
- 2 j 18 h
- PR mergées (30 j)
- 12
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de tortoise/tortoise-orm
-
pydantic_model_creator returns a cached class that ignores model_config, validators and modulePeut-être pris @moneebullah25 l’a pris il y a 6 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
tortoise/tortoise-orm#2310 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
tortoise/tortoise-orm#668 ·
Les mainteneurs répondent en général sous 2 jours
-
refresh_from_db silently ignores fields supplied as an iteratorPeut-être pris @IlyaKhalafi l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 35/100
tortoise/tortoise-orm#2341 ·
Les mainteneurs répondent en général sous 2 jours
-
Renamed fields break dict(model) and default values_listPeut-être pris @IlyaKhalafi l’a pris il y a 1 jour. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 25/100
tortoise/tortoise-orm#2337 ·
Les mainteneurs répondent en général sous 2 jours
-
Reverse relation filters use attribute names for SQL columnsPeut-être pris @IlyaKhalafi l’a pris il y a 1 jour. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
tortoise/tortoise-orm#2336 ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de tortoise/tortoise-orm
Issues similaires
-
Questions crashes on a real SQuAD2 no-answer predictionPeut-être pris @HuaTNA l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
GST is read as Gulf Standard Time (UTC+4) instead of Guam Standard Time (UTC+10)Peut-être pris @yang00333 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
DOI-USGS/dataretrieval-python#454 ·
Les mainteneurs répondent en général sous 4 jours
-
area:core-platform effort:S priority:P3 status:in-review type:test
Difficulté 2/5 Moins d'une heure Accessibilité débutants 80/100
randomparity/kdive#3246 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Requantification library converts m/z to mass with the hydrogen-atom mass instead of the proton massOuvertebug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
nf-core/metaboigniter#130 ·
Les mainteneurs répondent en général sous 1 jour
-
netbox status: needs owner type: documentation
Difficulté 1/5 Moins d'une heure Accessibilité débutants 75/100
netbox-community/netbox#23412 · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour