class Test(Model):
time = DateTimeField()
# ...
row = Test.select()[0]
test.time
Это возвращает строку, которая выглядит так: 2017-01-23 01:01:39+01:00. Как я могу получить его как объект datetime? Надо ли вручную разбирать?
Также мне было бы интересно, есть ли документация по использованию DateTimeField. В официальной документации об этом ничего не говорится.






Вы пробовали добавить такой вариант по умолчанию?
time = DateTimeField(default=datetime.datetime.now())
Или при добавлении записи добавьте ее напрямую как объект datetime.datetime:
test = Test(....., time=datetime.datetime.strptime("2018-3-15", '%Y-%m-%d'))
Во втором случае вам не нужно ничего указывать в определении класса ...
Хорошо, если я попробую это локально с моими предложениями, я получу объекты datetime.datetime в качестве возвращаемых значений. Если у вас нет доступа к тому, как данные записываются в базу данных, я полагаю, вам нужно их проанализировать. Затем вы можете использовать: datetime.datetime.strptime("2017-01-23 01:01:39+0100", "%Y-%m-%d %H:%M:%S%z") Единственная проблема в том, что вам нужно изменить формат часового пояса, чтобы datetime мог его читать. Вам нужно удалить двоеточие в части часового пояса
Вы используете SQLite? Если это так, SQLite не имеет выделенного типа datetime, поэтому datetime хранятся в виде строк в БД. Что будет делать peewee, так это распознавать определенные форматы datetime, исходящие из БД, и преобразовывать их в объекты datetime. Что вам нужно сделать, так это убедиться, что:
datetime полю.Форматы, которые peewee поддерживает прямо из коробки для поля datetime:
Похоже, у вас есть информация о зоне. Я бы предложил преобразовать в UTC и удалить информацию о зоне. Это должно исправить это.
Вот и все. Но как сохранить цинфо? Лучше хранить цинфо…
Вам нужно будет реализовать собственный тип для их хранения в Sqlite, поскольку у него нет выделенного типа datetime. Как я писал в своем комментарии, Только имеет смысл хранить UTC в sqlite из-за того, что он представлен в виде строки. Или, наоборот, используйте TimestampField, который хранится как целочисленная метка времени в формате UTC.
Мой вопрос не в записи данных в базу данных, а в чтении данных обратно в объект Python.