2017-11-14 5 views
0

Ich muss eine Tabelle von einer entfernten Datenbank überprüfen und eine andere Tabelle in meiner Datenbank aktualisieren. Die Modelle haben gleiche Felder aber mit Differenzverfahren Prüfung einen Fehler zurück:Django qs1.difference (qs2, qs3) wird vom Backend nicht unterstützt

qs1 get the data from one postgresql db

qs2 get the data from one mysql db

qs1 = (Local.objects 
      .values_list('ref') 
) 
qs2 = (Remote.objects 
      .filter() 
      .values_list('ref')) 

>>> qs1.difference(qs1, qs2) 

DatabaseError: intersection not supported on this database backend.

+0

Ja, was ist Ihre Frage? –

+0

was mache ich falsch? Ich verstehe den Unterschied nicht, ich bekomme diesen Fehler. – user2239318

+0

Wie der Fehler angibt, scheint es, dass Sie ein Backend verwenden, das nicht mit dieser Funktion kompatibel ist (ich nehme an, dass Sie PostgreSQL nicht verwenden). 'Differenz()' Methode ist neu in Django 1.11 so vielleicht gibt es andere Methoden zu tun, was Sie tun möchten, die mit Ihrem Backend arbeiten wird. –

Antwort

0
check = Qs1.objects.all() 
prg=[] 
[prg.append(x.ref) for x in check] 
difference = (Qs2.objects 
     .exclude(ref__in=prg) 
     .values() 
) 

Vielleicht ist es nicht elegant, aber es funktioniert einfach.

0

Ich bin mir nicht ganz sicher, was Sie denken, Ihr Code doind.

qs1 sucht nach einem Modell Local in Ihrer Standard-Datenbank. Und qs2 sucht nach einem Modell Remote auch in Ihrer Standard-Datenbank.

Was Sie vielleicht eine zweite Datenbank tun mögen, ist die Definition in Ihrem settings.py es für Instance „remote“ zu benennen und dann q2 wie folgt ändern:

qs2 = (Remote.objects.using("remote").filter().values_list('ref')) 

Dies sagt django, dass es kontaktieren Sie Ihre entfernte Datenbank, nicht Ihre lokale.

Ich weiß, ob das hilft oder nicht.

Verwandte Themen