Frage

Ich habe ziemlich lange Abfrage mit ‚Q ()‘, mit Sqlite3 sehr gut funktioniert, aber mit postgresql oder mysql ich seltsame Fehler habe z.B. für postgresql: invalid input syntax for integer: "(" und für mySQL: Truncated incorrect DOUBLE value: '('

Wie könnte ich laufen diese Abfrage mit MySQL? Wo liegt mein Fehler?

Hier ist die Abfrage:

    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()
War es hilfreich?

Lösung

Sie haben die Modelle nicht geschrieben, aber es sieht aus wie author ein Integer-Feld ist, oder vielleicht ein Fremdschlüssel. In diesem Fall, warum verwenden Sie str auf dem Tupel von Werten? Sie wollen vermutlich prüfen, ob Autor einer dieser Werte ist. So entfernen Sie einfach den str Anruf.

Der Grund, es erscheint in SQLite zu arbeiten ist, dass SQLite Feldtypen ignoriert - Strings und ganze Zahlen das gleiche behandelt. Andere DBMS sind strenger.

Andere Tipps

Es gibt nichts, offensichtlich bei der Abfrage suchen. Es wäre nützlich, die rohen Abfragen für die Sqlite3 und MySql zu vergleichen. Diese Link rel="nofollow zeigt Ihnen, wie die SQL-Abfrage einschalten debuggen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top