web-dev-qa-db-de.com

django Modelle ohne Datenbank

Ich weiß, dass die automatische Einstellung darin besteht, alle Modelle, die Sie in models.py definieren, zu Datenbanktabellen zu machen.

Ich versuche, Modelle zu definieren, die keine Tabellen sind. Sie müssen dynamische Daten speichern (die wir von APIs erhalten und konfigurieren), jedes Mal, wenn ein Benutzer nach etwas sucht. Diese Daten müssen zusammengestellt und dann, wenn der Benutzer fertig ist, verworfen werden.

zuvor habe ich dafür Datenbanktabellen verwendet. Es erlaubte mir, Dinge wie "Trips.objects.all" in jeder Ansicht zu tun und diese an jede Vorlage zu übergeben, da alles aus einer Datenquelle stammte. Ich habe gehört, Sie können die Modellinstanziierung einfach nicht "speichern" und sie dann nicht in der Datenbank speichern, aber ich muss auf diese Daten (die ich in einer Ansicht zusammengestellt habe) in mehreren anderen Ansichten zugreifen, um manipulieren und anzeigen. . . Wenn ich nicht speichere, kann ich nicht darauf zugreifen, wenn ich speichere, dann ist es in einer Datenbank (was zu Problemen mit der Parallelität bei mehreren Benutzern führen würde).

Ich möchte nicht wirklich ein Wörterbuch/eine Liste durchgehen, und ich bin mir nicht mal sicher, wie ich das gemacht habe, wenn ich musste.

ideen?

Vielen Dank!

22
dlitwak

Eine andere Option ist die Verwendung von:

class Meta:
    managed = False

Um zu verhindern, dass Django eine Datenbanktabelle erstellt.

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

11
andorov

Klingt für mich einfach nach einer regulären Class .

Verwenden Sie möglicherweise die Middleware , um sie zu instanziieren, wenn die Anforderung eingeht, und zu verwerfen, wenn die Anforderung abgeschlossen ist. Eine Zugriffsstrategie könnte darin bestehen, sie an das Anforderungsobjekt selbst anzuhängen, jedoch an ymmv.

8
John Mee

Im Gegensatz zu SQLAlchemy unterstützt Djangos ORM keine Abfrage des Modells ohne Datenbank-Backend.

Sie können nur eine speicherinterne SQLite-Datenbank oder Anwendungen von Drittanbietern wie dqms verwenden, die ein reines speicherinternes Backend für Djangos ORM bieten.

5
Burhan Khalid

Verwenden Sie das Cache-Framework von Django, um Daten zu speichern und zwischen Ansichten auszutauschen.

1
Mariusz Jamro

Sie benötigen Caching, das Ihre Daten im Speicher speichert und eine separate Anwendung darstellt.

Mit Django können Sie verschiedene Caching-Backends wie Memcache, Datenbank-Backend, Redis usw. verwenden. Da Sie einige grundlegende Abfrage- und Sortierfunktionen wünschen, würde ich Redis empfehlen. Redis hat eine hohe Leistung (nicht höher als Memcache), unterstützt Datenstrukturen (String/Hash/Listen/Sets/Sorted-Set).

Redis ersetzt die Datenbank nicht, eignet sich jedoch als Schlüssel-Wert-Datenbankmodell, bei dem Sie den Schlüssel vorbereiten müssen, um die Daten effizient abzufragen, da Redis nur die Abfrage von Schlüsseln unterstützt.

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-Befehle finden Sie unter http://redis.io/commands

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

0
Ravi Kumar

Versuchen Sie, datenbank- oder dateibasiertes sessions zu verwenden.

0