2014-12-28 1 views
0

при отладке модульного тестирования в Django, я поместил следующее заявление в своем кодеНесогласованность между базой данных и выводом Django ORM в точке останова

Student.objects.filter(id__in=[1,2]).delete() 
... 
import pdb; pdb.set_trace() 

В контрольной точке, если я тип Student.objects.count(), я вижу, что у него есть уменьшено из-за удаления, однако, если я открою psql (командная строка PostgreSQL) и проверьте test_database, я все еще вижу строки (которые были удалены в соответствии с Django). Почему я вижу это несоответствие базы данных Django ORM &. Является ли ORM кэшем мои запросы? Как я могу сделать это фиксацией базы данных в точке останова?

Update:

Быстрое решение для отладки. Добавьте следующие строки в точку останова, чтобы увидеть данные в psql. Спасибо @DanielRoseman за подсказку.

from django.db import connection 
    connection.cursor().execute('commit;') 

ответ

2

Запросы Django обычно выполняются внутри транзакции. Ваш сеанс psql не будет видеть изменения до тех пор, пока транзакция не будет выполнена, когда сессия вернется.

+0

Спасибо, что указали это. Имеет смысл после небольшого чтения транзакций. В противном случае это было непонятно для кого-то, не знакомого с внутренней работой. – Medorator