web-dev-qa-db-fra.com

django modèles sans base de données

Je sais que le paramètre automatique consiste à avoir des modèles que vous définissez dans les modèles.py devient des tables de base de données.

J'essaie de définir des modèles qui ne seront pas des tables. Ils doivent stocker des données dynamiques (que nous obtenons et configurons des API), chaque fois qu'un utilisateur cherche quelque chose. Ces données doivent être assemblées, puis lorsque l'utilisateur est terminé, mis au rebut.

auparavant, j'utilisais des tables de base de données pour cela. Cela m'a permis de faire des choses comme "trips.objects.all" dans n'importe quelle vue et transmettez-le à n'importe quel modèle, car tout ira d'une source de données. J'ai entendu dire que vous ne pouvez tout simplement pas "enregistrer" l'instanciation du modèle, puis il n'a pas enregistré dans la base de données, mais je dois accéder à ces données (que j'ai assemblées en une vue), dans plusieurs autres vues, à manipuler et l'afficher. . . Si je n'ai pas sauvegardé, je ne peux pas y accéder, si je fais une sauvegarde, c'est dans une base de données (qui aurait des problèmes de concurrence avec plusieurs utilisateurs)

Je ne veux pas vraiment passer autour d'un dictionnaire/liste, et je ne suis même pas sûr de la façon dont je faisais cela si je devais.

idées?

Merci!

30
dlitwak

Une autre option est d'utiliser:

class Meta:
    managed = False

Pour prévenir Django de créer une table de base de données.

https://docs.djangoproject.com/fr/1.9/RF/models/OPTIONS/#GANAGÉ

17
andorov

Contrairement à Sqlalchemy, l'orme de Django ne prend pas en charge la requête sur le modèle sans backend de base de données.

Vos choix sont limités à l'utilisation d'une base de données SQLITE dans la mémoire ou d'utiliser des applications tierces telles que DQMS qui fournissent un backend pure en mémoire pour l'ormes de Django.

5
Burhan Khalid

Utilisez Django's cache-cache pour stocker les données et la partager entre les vues.

1
Mariusz Jamro

Vous avez besoin de la mise en cache, qui stockera vos données en mémoire et sera une application séparée.

Avec Django, vous pouvez utiliser divers backend de mise en cache tels que MemCache, Base de données-Backend, Redis, etc. puisque vous voulez une capacité de requête et de tri de base, je recommanderais REDIS . Redis a une performance élevée (pas plus haute que MemCache), prend en charge les données de données (chaîne/hachage/listes/listes/ensembles/ensemble de tri).

Redis ne remplacera pas la base de données, mais conviendra bien en tant que modèle de base de données de la valeur clé, où vous devez préparer la clé pour interroger efficacement les données, car REDIS prend en charge la requête uniquement sur les touches.

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:*")

Les commandes REDIS sont disponibles à http://redis.io/commands

Django Redis Cache Backend: https://github.com/sebleier/django-redis-cache/

0
Ravi Kumar