2011-02-08 6 views
1

내가 (./manage.py shell_plus를 통해) 대화 형 쉘에서 실행 해요장고 명령은 새로 추가 된 데이터

c = MyModel.objects.count() 
while True 
    assert MyModel.objects.count() == c 
    sleep(1) 

다음 내가 관리자로 이동하여 새 MyModel 개체를 추가 몰래 없습니다. 나는 주장이 실패 할 것이라고 추측 하겠지만, 새로운 기록을 발견하지 못한 채 오래된 기록을 계속 유지한다.

당신은이 원인을 알고 있습니까? 첫 번째 용의자는 캐시 시스템이지만 테스트하는 방법을 모르겠습니다.
이 문제를 극복하고 쿼리에서 새 레코드를 인식하는 방법을 알고 계십니까?

미리 감사드립니다 ...

답변

0

이것은 거래 관련 문제인 것 같습니다. process_records을 호출 할 때마다 수동으로 커밋하도록 스크립트를 설정하려고합니다.

transaction docs을 참조하십시오.

+0

내 끝없는 스크립트는 데이터를 쓰는 데 문제가 없으며 새로운 데이터를 알아 차리는 데 문제가 있습니다. 간략한 사례를 보여주기 위해 질문을 업데이트하겠습니다. – Iftah

+0

당신이 옳았다 고 생각되며 거래와 관련이 있습니다. 나는 비슷한 질문을 찾았습니다. http://stackoverflow.com/questions/1886909/how-to-disable-django-query-cache 그리고 transaction.commit() 트릭이 저에게 효과적입니다. 갑자기 커밋을 실행하면 읽기가 새 데이터를 반환합니다. 나는 transactions.commit이 DB에 쓰는 것에 영향을 미쳤지 만 독서는 아니지만 이상하다고 생각했습니다. – Iftah

+0

@Iftah : 트랜잭션 격리에서 읽음 : 트랜잭션이 독립적으로 작동 할 수 있어야하므로 열려있는 동안 다른 트랜잭션이 쓴 데이터는 볼 수 없습니다. –

관련 문제