Каков порядок по умолчанию для списка, возвращаемого при вызове фильтра Django?

Краткий вопрос
Каков порядок по умолчанию для списка, возвращаемого вызовом фильтра Django при подключении к базе данных PostgreSQL?

Предпосылки
По моему собственному признанию, я сделал неверное предположение на прикладном уровне в том, что порядок, в котором возвращается список, будет постоянным, то есть без использования 'order_by'. Список элементов, которые я запрашивал, не отсортирован по алфавиту или в любом другом преднамеренном порядке. Считалось, что они останутся в том же порядке, в котором они были добавлены в базу данных.

Это предположение верно для сотен запросов, но мое приложение сообщило об ошибке, когда порядок изменился по незнанию. Насколько мне известно, ни одна из этих записей не была затронута в течение этого времени, поскольку я единственный человек, который поддерживает БД. Чтобы добавить путаницы, при запуске приложения Django в Mac OS X оно по-прежнему работало, как ожидалось, но в Win XP оно изменило порядок. (Обратите внимание, что упомянутые сотни запросов были на Win XP).

Любое понимание этого было бы полезно, поскольку я не смог найти ничего в документации Django или PostgreSQL, которая объясняла бы различия в операционных системах.

Пример звонка

required_tests = Card_Test.objects.using(get_database()).filter(name__icontains=key)

РЕДАКТИРОВАТЬ
Поговорив сегодня с некоторыми моими коллегами, я пришел к тому же ответу, что и Бьорн Линдквист.

Оглядываясь назад, я определенно понимаю, почему это так часто делается неправильно. Одно из преимуществ использования ORM Django, sqlalchemy или чего-то еще заключается в том, что вы можете писать команды, не зная или не разбираясь (подробно) в базе данных, к которой он подключен. По общему признанию, я был одним из этих пользователей. Однако с другой стороны это то, что без детального знания базы данных отладочные ошибки, подобные этой, являются довольно неприятными и потенциально катастрофическими.

47
задан Paolo 15 July 2018 в 00:45
поделиться