2017-11-14 1 views
0

원격 db에서 테이블을 확인하고 내 db의 다른 테이블을 업데이트해야합니다. 모델은 같은 필드가 있지만 차분 법으로 확인하면 오류를 반환합니다Django qs1.difference (qs2, qs3) 백엔드에서 지원되지 않음

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

네, 그렇다면 질문은 무엇입니까? –

+0

내가 뭘 잘못하고 있니? 나는 그 차이를 얻을 수 없다. 나는이 오류를 얻는다. – user2239318

+0

오류 상태로,이 기능과 호환되지 않는 백엔드를 사용하고있는 것 같습니다 (PostgreSQL을 사용하지 않는 것 같습니다). 'difference()'메소드는 Django 1.11의 새로운 기능이므로 원하는 작업을 수행하는 다른 방법이있을 수 있습니다. 이는 백엔드에서 작동합니다. –

답변

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

어쩌면 우아하지 않을 수도 있지만 작동합니다.

0

난 당신이 코드가 doind 생각 정확히 모르겠어요.

qs1은 기본 Databasengine에서 로컬을 찾습니다. 그리고 qs2 모델 원격 기본 Databasengine도 찾습니다.

다음과 같이 인스턴스 "원격"그것을 명명하여 settings.py 에서 두 번째 데이터베이스를 정의하면된다 다음 분기를 수정 할 수 있습니다 무엇 :

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

이는 것을 장고를 알려줍니다 로컬 데이터베이스가 아닌 원격 데이터베이스에 문의하십시오.

대체로 도움이되는지 여부는 알 수 없습니다.