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

SQLAlchemy查询SQLite的DATETIME('now')返回字符串,如何统一获取datetime对象

问题原因

这个差异是两方面共同作用的结果:

  • 数据库返回的原生值类型不同:MySQL的CURRENT_TIMESTAMP返回的是原生时间类型,对应Python MySQL驱动会直接将其映射为datetime对象;而SQLite本身无原生datetime类型,DATETIME('now')返回的是ISO格式的字符串,SQLite驱动不会默认将其转换为datetime对象。
  • 你使用的是无类型标注的原生SQL查询,SQLAlchemy对于这类查询不会主动做跨数据库的类型映射,只会直接返回数据库驱动返回的原生值。

解决方案

最优方案是直接使用SQLAlchemy内置的跨数据库兼容时间函数,无需手动判断数据库类型,也能保证返回值统一为datetime对象:

from sqlalchemy import func

# 自动适配不同数据库生成对应的时间查询语句,返回值统一为datetime类型
timestamp = session.execute(func.current_timestamp()).scalar()

如果确有需求要使用自定义原生SQL,可以手动给查询指定返回类型,强制SQLAlchemy做类型转换:

from sqlalchemy import text
from sqlalchemy.types import DateTime

if settings.DATABASE_URL.startswith("sqlite"):  
    CURRENT_TIME_QUERY = text("SELECT DATETIME('now')").columns(DateTime)
else:
    CURRENT_TIME_QUERY = text("SELECT CURRENT_TIMESTAMP").columns(DateTime)

timestamp = session.execute(CURRENT_TIME_QUERY).scalar()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:36:04