You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Peewee中将DateTimeField值转为datetime对象及查询相关文档

关于Peewee DateTimeField:字符串转datetime及文档说明

嘿,我来帮你解决这个问题~

一、不用手动解析!让框架自动返回datetime对象

你拿到的带时区的ISO字符串,大概率是使用SQLite数据库导致的(SQLite没有原生datetime类型,默认会把DateTimeField存为字符串),但完全不需要手动解析,通过简单配置就能直接拿到datetime对象:

方式1:给单个DateTimeField配置formatter

在定义字段时,指定formatter参数为datetime.fromisoformat,框架会自动帮你把字符串转成datetime对象:

from datetime import datetime
from peewee import Model, DateTimeField, SQLiteDatabase

db = SQLiteDatabase("your_database.db")

class Test(Model):
    time = DateTimeField(formatter=datetime.fromisoformat)  # 核心配置
    
    class Meta:
        database = db

这样你再取row.time的时候,得到的就是标准的datetime.datetime实例了。

方式2:全局配置SQLite数据库

如果你的项目里有多个DateTimeField,也可以在初始化SQLite数据库时全局设置,一次性搞定所有字段的转换:

db = SQLiteDatabase("your_database.db", date_class=datetime.datetime)

而如果是用PostgreSQL、MySQL这类有原生datetime类型的数据库,Peewee默认就会返回datetime对象,不需要额外配置。

二、手动解析的备用方案(非首选)

要是因为特殊情况没法修改字段或数据库配置,手动解析也很简单,直接用Python内置的方法:

from datetime import datetime

dt_object = datetime.fromisoformat(row.time)

但还是更推荐用框架自带的配置,既省心又能避免手动解析可能出现的格式问题。

三、DateTimeField的官方文档找这里

你说没找到相关文档?其实它就在Peewee官方文档的Fields章节里,属于通用字段的一部分,里面详细说明了:

  • 不同数据库下的行为差异(比如SQLite和PostgreSQL的区别)
  • 实用参数:比如default可以设置默认时间(像datetime.utcnow)、update可以让字段在更新时自动刷新时间、formatter自定义序列化/反序列化逻辑等
  • 各种场景的示例用法

仔细翻一下官方文档的字段列表,就能找到它的详细说明啦~

内容的提问来源于stack exchange,提问作者Toast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:05:37