如何在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
相关产品推荐
相关产品推荐

