Django: Query отлично работает с Sqlite3, но не с другими.

У меня довольно длинный запрос с 'Q()', с Sqlite3 работает очень хорошо, но с postgresql или же mysql У меня странная ошибка, например, для postgresql: invalid input syntax for integer: "(" и для MySQL: Truncated incorrect DOUBLE value: '('

Как я могу выполнить этот запрос с MySQL? Где моя ошибка?

Вот этот запрос:

    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()

2 ответа

Решение

Вы не опубликовали свои модели, но похоже, author является целочисленным полем, или, возможно, внешним ключом. В каком случае, почему вы используете str на кортеж ценностей? Вероятно, вы хотите проверить, является ли автор одним из этих значений. Так что просто удалите str вызов.

Причина, по которой он работает в sqlite, заключается в том, что sqlite игнорирует типы полей - строки и целые числа обрабатываются одинаково. Другие СУБД более строгие.

Нет ничего очевидного, глядя на запрос. Было бы полезно сравнить необработанные запросы для Sqlite3 и MySql. Эта ссылка показывает, как включить отладку SQL-запросов.

Другие вопросы по тегам