Как получить значение DateTimeField в peewee

class Test(Model):
    time = DateTimeField()

# ...
row = Test.select()[0]
test.time

Это возвращает строку, которая выглядит так: 2017-01-23 01:01:39+01:00. Как я могу получить его как объект datetime? Надо ли вручную разбирать?

Также мне было бы интересно, есть ли документация по использованию DateTimeField. В официальной документации об этом ничего не говорится.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
1 324
2

Ответы 2

Вы пробовали добавить такой вариант по умолчанию?

time = DateTimeField(default=datetime.datetime.now())

Или при добавлении записи добавьте ее напрямую как объект datetime.datetime:

test = Test(....., time=datetime.datetime.strptime("2018-3-15", '%Y-%m-%d'))

Во втором случае вам не нужно ничего указывать в определении класса ...

Мой вопрос не в записи данных в базу данных, а в чтении данных обратно в объект Python.

Toast 19.05.2018 22:50

Хорошо, если я попробую это локально с моими предложениями, я получу объекты datetime.datetime в качестве возвращаемых значений. Если у вас нет доступа к тому, как данные записываются в базу данных, я полагаю, вам нужно их проанализировать. Затем вы можете использовать: datetime.datetime.strptime("2017-01-23 01:01:39+0100", "%Y-%m-%d %H:%M:%S%z") Единственная проблема в том, что вам нужно изменить формат часового пояса, чтобы datetime мог его читать. Вам нужно удалить двоеточие в части часового пояса

eoxxs 19.05.2018 23:04

Вы используете SQLite? Если это так, SQLite не имеет выделенного типа datetime, поэтому datetime хранятся в виде строк в БД. Что будет делать peewee, так это распознавать определенные форматы datetime, исходящие из БД, и преобразовывать их в объекты datetime. Что вам нужно сделать, так это убедиться, что:

  1. Когда вы создаете / сохраняете свой объект, вы назначаете объект datetime полю.
  2. При обратном чтении ранее существовавших данных убедитесь, что данные находятся в распознанном формате.

Форматы, которые peewee поддерживает прямо из коробки для поля datetime:

  • ГГГГ-мм-дд ЧЧ: ММ: СС.ffffff
  • ГГГГ-мм-дд ЧЧ: ММ: СС
  • ГГГГ-мм-дд

Похоже, у вас есть информация о зоне. Я бы предложил преобразовать в UTC и удалить информацию о зоне. Это должно исправить это.

Вот и все. Но как сохранить цинфо? Лучше хранить цинфо…

alexpirine 18.05.2020 12:06

Вам нужно будет реализовать собственный тип для их хранения в Sqlite, поскольку у него нет выделенного типа datetime. Как я писал в своем комментарии, Только имеет смысл хранить UTC в sqlite из-за того, что он представлен в виде строки. Или, наоборот, используйте TimestampField, который хранится как целочисленная метка времени в формате UTC.

coleifer 21.05.2020 16:02

Другие вопросы по теме