2012-02-01 3 views
17

Я знаю, что автоматическая настройка - это любые модели, которые вы определяете в models.py, стать таблицами базы данных.модели django без базы данных

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

Ранее я использовал таблицы базы данных для этого. Это позволило мне делать что-то вроде «Trips.objects.all» в любом представлении и передавать его любому шаблону, поскольку все это происходило из одного источника данных. Я слышал, вы просто не можете «сохранить» экземпляр модели, а затем он не сохраняется в базе данных, но мне нужно получить доступ к этим данным (которые я собрал в одном представлении), в нескольких других представлениях, чтобы манипулировать им и отображать его. , , если я не сохраняю, я не могу получить к нему доступ, если я сохраню, а затем его в базе данных (которая будет иметь проблемы параллелизма с несколькими пользователями)

Я действительно не хочу передавать словарь/список , и я даже не уверен, как я это делал, если бы мне пришлось.

идеи?

Спасибо!

+0

[Кто-то умный] (http://www-cs-faculty.stanford.edu/~uno/) когда-то сказал что-то о преждевременной оптимизации ... как это было? Непонятно, какую проблему вы пытаетесь решить здесь. У вас его даже не может быть! Я бы сказал, использовать Django, как он есть, любить его, кто он есть, и вернуться сюда с конкретными проблемами, если у вас есть. – dokkaebi

+0

Этот вопрос имеет много преимуществ, не все приложения используют или нуждаются в базе данных в качестве бэкэнд, и все же они могут потребовать типовой подход. Непонятно, как отключить постоянство db в Django. –

ответ

0

Попробуйте использовать базу данных или файл на основе sessions.

+0

Уже пробовали, если вы храните экземпляры модели в сеансе, вы можете получить ее, но вы не можете использовать все обычные методы в модели. , , например, «order_by». , , я полагаю, это потому, что они переводится на sql, и у нас больше нет базы данных, но все же. , возможно, я ищу что-то, чего не существует – dlitwak

1

Используйте Django's cache framework для хранения данных и обмена ими между видами.

6

Просто звучит как обычный Class для меня.

Возможно, используйте the middleware, чтобы создать экземпляр, когда запрос приходит и отбрасывается, когда запрос завершен. Одна стратегия доступа может заключаться в том, чтобы прикрепить ее к самому объекту запроса, но ymmv.

+4

Где лучше всего разместить этот обычный класс? 'Models.py'? – schoettl

+0

Использование моделей вместо обычных классов иногда может быть выгодным, т. Е. При использовании чего-то вроде django-rest-swagger для создания документов API. – user1158559

+0

'models.py' является подходящим местом для такой модели – user1158559

4

В отличие от SQLAlchemy, ORM django не поддерживает запросы к модели без бэкэнд базы данных.

Ваш выбор ограничен использованием базы данных SQLite в памяти или для использования сторонних приложений, таких как dqms, которые обеспечивают чистую внутреннюю память в памяти для ORM django.

0

Вам необходимо кэширование, которое будет хранить ваши данные в памяти и будет отдельным приложением.

С помощью Django вы можете использовать различные кэширующие бэкэнд, такие как memcache, database-backend, redis и т. Д. Поскольку вы хотите получить базовый запрос и возможность сортировки, я бы порекомендовал Redis. Redis имеет высокую производительность (не выше memcache), поддерживает datastructures (string/hash/lists/sets/sorted-set).

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

For example, user 'john.doe' data is: key1 = val1 
The key would be - john.doe:data:key1 
Now I can query all the data for for this user as - redis.keys("john.doe:data:*") 

Redis Команды доступны на http://redis.io/commands

Джанго Redis бэкэнды: https://github.com/sebleier/django-redis-cache/

-4

сойду к MongoDB или любого другого NoSQL; сохранение и удаление данных невероятно быстро, вы можете использовать django-norel (mongodb) для этого.

http://django-mongodb.org/

11

Другой вариант заключается в использовании:

class Meta: 
    managed = False 

Чтобы предотвратить Джанго от создания таблицы базы данных.

https://docs.djangoproject.com/en/1.9/ref/models/options/#managed

+0

В плакате упоминается, что он хочет использовать модель Django, не поддерживая ее таблицей. Документация Django, на которую вы ссылаетесь, конкретно указывает, что операции миграции и удаления не будут выполняться, а все остальные операции, связанные с таблицей, будут продолжать работать, как если бы таблица существовала. –