聚合日期列时解析声明类型失败
我有一个SQLite数据库,在里面我把某些列的类型声明为日期(虽然SQLite实际上并没有日期这种类型,所以它会忽略这个声明)。我把日期存储为SQLite的日期字符串。
当我用Python连接这个数据库时,我传递了detect_types=sqlite3.PARSE_DECLTYPES
这个参数。这样做的好处是,sqlite库能够正确识别哪些列是日期类型,并且当我从这些列读取数据时,它会给我一个date
对象,而不是字符串。
不过,如果我对一个日期列进行聚合操作,我得到的结果是字符串,而不是日期:
SELECT MIN(ReportDate) FROM PatientReports WHERE PatientID = ?;
这个操作返回的是字符串,而不是日期值。有趣的是,下面这个SQL:
SELECT ReportDate FROM PatientReports WHERE PatientID = ? ORDER BY ReportDate DESC LIMIT 1;
能够正确返回一个日期值(这也是我现在使用的解决办法)。
问题是:有没有办法修改第一个SQL语句或者我的数据库定义,让Python能够保持日期的转换?
1 个回答
5
PARSE_DECLTYPES
这个功能只有在你直接使用某个列的值时才有效。如果你对这个值进行了一些处理,比如通过函数传递它,或者进行数学运算,或者简单地像这样写 +ReportDate
,那么它原本的类型信息就会丢失。
这就意味着,实际上 PARSE_DECLTYPES
的用处并不大。
如果你真的想使用 Python 的类型转换功能,应该启用 PARSE_COLNAMES
,并在需要的时候把类型加到列名里:
SELECT MIN(ReportDate) AS "ReportDate [date]" FROM ...