Библиотека Python sqlite3 иногда возвращает наивные времена дат, а иногда осознанные времена дат для одного и того же столбца

У меня есть колонка TIMESTAMP в моей базе данных SQLite, хранящая время с часовым поясом, например 2021-09-29 18:46:02.098000+00:00. Когда я получаю эту строку в моем приложении Django, столбец возвращается в виде aware объекта datetime. Однако, когда я получаю эту строку в сценарии, который не использует Django, в точно таком же пути кода, столбец возвращается как наивный объект.

Обратите внимание, что в обоих случаях я использую встроенную библиотеку sqlite3, а не ORM от Django.

Почему типы возврата несовместимы?

Django поставляется со встроенным SQLite конвертером для TIMESTAMP колонок, который отменяет встроенный Python конвертер, и, в отличие от встроенного, возвращает осознанные даты, если колонка базы данных содержит часовой пояс.

Поскольку конвертер зарегистрирован глобально, он применяется независимо от того, используете ли вы Django ORM или нет.

Конвертер зарегистрирован в кодовой базе Django здесь, а оригинальный тикет с некоторым обсуждением доступен здесь.

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