Django-ORM-Abfragen können keine neuen Objekte auswählen

Konfiguration:

  • Python-Skript A fügt Daten in eine DB alle 15 Minuten ein
  • Python-Skript B Abfragen für die letzten 5 Einträge alle paar Minuten

Beide verwenden djangos ORM, das gleiche MySQL DB und das gleiche DB Benutzerkonto (gleiche settings.py Datei)

  • Django ORM - objects.filter () vs. objects.all () Filter () - welches ist bevorzugt?
  • Wann schaut Django den Primärschlüssel der Fremdschlüssel auf?
  • Single django queryset, um n benachbarte Gegenstände zu bekommen
  • Schwingungsdaten und komplexe Annotationen in Django ORM
  • Django Transaction verwalteter Block endete mit ausstehendem COMMIT / ROLLBACK
  • Django ORM - Mock Werte () Filter () Kette
  • Das Problem:
    B ist in der Lage, nur eingefügte Einträge zu holen, bevor es ausgeführt wurde. Als ob B mit einer gefrorenen DB läuft, gefroren im Moment B zuerst mit der DB verbunden.

    Woher?
    Kann ich dieses Verhalten in django kontrollieren?

  • Wann ist die Ausgabe von repr nützlich?
  • Force repr () um einfache Anführungszeichen zu verwenden
  • Beste Ausgabetyp und Codierung Praktiken für __repr __ () Funktionen?
  • Was macht das in str () und repr ()?
  • Str () vs repr () Funktionen in python 2.7.5 [duplizieren]
  • Java-Äquivalent von Python repr ()?
  • 2 Solutions collect form web for “Django-ORM-Abfragen können keine neuen Objekte auswählen”

    Wenn du das gleiche Manager-Objekt wiederverwendest, musst du im Auge behalten, dass es Caching ist . Um damit zu handeln, musst du manuell aktualisieren.

    Dies führt bei jeder Iteration zu gleichen Ergebnissen:

     while True: same_every_time = AClass.objects.all().order_by('-id')[:5] sleep(300) 

    Um es richtig funktionieren zu lassen, musst du das Update hinzufügen:

     while True: AClass.objects.update() updated_results = AClass.objects.all().order_by('-id')[:5] sleep(300) 

    Django selbst verwendet eine Art Container-verwaltete Persistenz. Dies bedeutet, dass die Datenbank-Transaktionen von der Middleware während der Upstream-Response-Kaskade begangen werden.

    Wenn Sie usiong Django ORM von selbst sind, sollten Sie sicherstellen, tatsächliche Begehung der Transaktion:

     from django.db import transaction def my_task(whatever): MyModel.objects.create(...) # do whatever transaction.commit() return 'my_result' 
    Python ist die beste Programmiersprache der Welt.