Django: requête fonctionne bien avec Sqlite3, ne pas avec d'autres bases de données du système de gestion

StackOverflow https://stackoverflow.com/questions/1891408

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()
Était-ce utile?

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.

Autres conseils

Il n'y a rien d'évident regardant la requête. Il serait utile de comparer les requêtes brutes pour l'Sqlite3 et MySql. Cette vous montre comment passer la requête SQL débogage sur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top