при отладке модульного тестирования в 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;')
Спасибо, что указали это. Имеет смысл после небольшого чтения транзакций. В противном случае это было непонятно для кого-то, не знакомого с внутренней работой. – Medorator