Расхождение в количестве записей между Django ORM и сырым SQL-запросом

Я столкнулся с проблемой, когда количество записей, возвращаемое ORM-запросом Django, не совпадает с количеством, возвращаемым необработанным SQL-запросом. Вот соответствующая часть моего представления Django:

start_date = datetime(2024, 10, 19, 0, 0, 0)
end_date = datetime(2024, 10, 19, 23, 59, 59)
dbug = Reservations.objects.all().filter(updated_at__range=(start_date, end_date))
print(dbug.count())

Выше возвращается 6529

В файле Django settings.py содержится:

TIME_ZONE = 'Asia/Tehran'

USE_TZ = False

Я попробовал SQL-запрос, который приведен ниже:

SELECT COUNT(*) FROM "consultant_reservations"
WHERE updated_at BETWEEN '2024-10-19 00:00:00' AND '2024-10-19 23:59:59';
 count 
-------
  6540
(1 row)

Вот несоответствие между результатом SQL запроса ( который равен 6540), который я пробовал в psql терминале и результатом Django ORM ( который равен 6529)


Пожалуйста, позвольте мне представить пример:

Попытка выполнить SQL-запрос, аналогичный:

SELECT * FROM "consultant_reservations"
WHERE updated_at BETWEEN '2024-10-19 00:00:00' AND '2024-10-19 23:59:59' LIMIT 4;

Результат:

  id   |   idd   | voip_number | client_id | client_mobile | reserve_duration |  status  |   reserve_timestamp    |       created_at       |       updated_at       | consultant_id_id | mobile_id | created_by | updated_by 
-------+---------+-------------+-----------+---------------+------------------+----------+------------------------+------------------------+------------------------+------------------+-----------+------------+------------
 76407 | 2011050 |        2217 |   1101151 | 09355648120   |             3600 | reserved | 2024-10-19 19:30:00+00 | 2024-10-14 08:40:03+00 | 2024-10-19 20:28:01+00 |             5052 |   2395781 |       3445 |          0
  1408 | 1958653 |        1119 |    754939 | 09142477905   |             3600 | reserved | 2024-10-19 05:30:00+00 | 2024-09-28 06:17:04+00 | 2024-10-19 06:28:01+00 |             3791 |    974986 |         87 |          0
  1514 | 1958759 |        2571 |    947805 | 09334143576   |             3600 | reserved | 2024-10-19 09:30:00+00 | 2024-09-28 06:34:05+00 | 2024-10-19 10:28:01+00 |             5374 |   1711586 |       3802 |          0
 60371 | 1997347 |        2589 |   1070143 | 09033927800   |             3600 | reserved | 2024-10-19 12:30:00+00 | 2024-10-09 11:42:37+00 | 2024-10-19 13:28:02+00 |             5385 |   2279104 |       3814 |          0
(4 rows)

Попытка запроса Django такая же, как:

start_date = datetime(2024, 10, 19, 0, 0, 0)
end_date = datetime(2024, 10, 19, 23, 59, 59)
dbug = Reservations.objects.all().filter(updated_at__range=(start_date, end_date))[:4]
data = list(dbug.values())
df = pd.DataFrame(data)
print(df.head(4))

Результат:

      id      idd  consultant_id_id  voip_number  client_id client_mobile  ...    status   reserve_timestamp          created_at created_by updated_by          updated_at
0  76407  2011050              5052         2217    1101151   09355648120  ...  reserved 2024-10-19 23:00:00 2024-10-14 12:10:03       3445          0 2024-10-19 23:58:01
1   1408  1958653              3791         1119     754939   09142477905  ...  reserved 2024-10-19 09:00:00 2024-09-28 09:47:04         87          0 2024-10-19 09:58:01
2   1514  1958759              5374         2571     947805   09334143576  ...  reserved 2024-10-19 13:00:00 2024-09-28 10:04:05       3802          0 2024-10-19 13:58:01
3  60371  1997347              5385         2589    1070143   09033927800  ...  reserved 2024-10-19 16:00:00 2024-10-09 15:12:37       3814          0 2024-10-19 16:58:02

[4 rows x 14 columns]

Показывает, что обнаруженное расхождение в результатах sql между или одно.

Таблице consultant_reservations присвоена модель Reservation.

«Благодарности».

Вернуться на верх