Django: requête fonctionne bien avec Sqlite3, ne pas avec d'autres bases de données du système de gestion
-
19-09-2019 - |
Question
J'ai requête assez long avec « Q () », avec Sqlite3
fonctionne très bien, mais avec postgresql
ou mysql
je étrange erreur par exemple pour postgresql: invalid input syntax for integer: "("
et mySQL: Truncated incorrect DOUBLE value: '('
Comment pourrais-je exécuter cette requête avec MySQL? Où est mon erreur?
Voici cette requête:
watchersTuple = self.getWatchers()
tagsTuple = self.getTags()
blockedUserTuple = self.getBlockedUser()
blockedTagTuple = self.getBlockedTag()
statuses = Status.objects.filter( (Q(author__in = str(watchersTuple)) | Q(tags__in = str(tagsTuple)) | Q(author = self) | Q(recipient = self)) & ~Q(author__in = str(blockedUserTuple)) & ~Q(tags__in = str(blockedTagTuple)) ).distinct()
La solution
Vous avez pas posté vos modèles, mais il semble que author
est un champ entier, ou peut-être une clé étrangère. Dans ce cas, pourquoi utilisez-vous str
sur le tuple de valeurs? Vous voulez sans doute de vérifier si l'auteur est l'une de ces valeurs. Donc, il suffit de retirer l'appel str
.
La raison pour laquelle il semble fonctionner dans SQLite est que sqlite ne tient pas compte des types de champs - les chaînes et les entiers sont traités de la même. D'autres sont plus strictes DBMS.