Сериализация QuerySets. Получить запрос в sql виде

Используя pickle для QuerySet, будет выполнен запрос к базе данных что бы загрузить данные в память для сериализации. Сериализация обычно используется перед кэшированием QuerySet или загрузкой из кеша, необходимо что бы результат был доступен для использования сразу после загрузки (чтение с базы данных занимает некоторое время, что свело бы всю пользу кэширования к нулю). Это означает что после восстановления сериализованного QuerySet, он будет содержать результат на момент сериализации, а не тот, который хранится в базе данных на текущий момент.

Если вам необходимо сохранить запрос выполняемый QuerySet, что бы получить данные позже, сериализируйте атрибут query QuerySet. Позже вы можете воссоздать первоначальный QuerySet (без загрузки результата) используя такой код:

>>> import pickle
>>> query = pickle.loads(s)    
>>> qs = MyModel.objects.all()
>>> qs.query = query            # Получить оригинальный 'запрос'.

Атрибут query не является частью публичного API, и является частью внутреннего механизма создания запросов. Однако, поддерживает использование pickle и unpickle как показано в примере выше.

Сериализация QuerySets возможна только для версии Django, которая была использована при сохранении объекта. При сериализации объекта в версии Django N, нет гарантии что, его можно будет восстановить в версии Django N+1. Сериализация не должна быть использована для долговременного хранения данных.

Добавить комментарий