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-запросов.