聚合日期列中断PARSE_DECLTYPES

时间:2014-09-07 16:04:41

标签: python sqlite

我有一个SQLite数据库,其中我已声明某些列类型为DATE(允许但当然,SQLite忽略它,因为它没有DATE类型)。我将我的日期存储为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 个答案:

答案 0 :(得分:3)

PARSE_DECLTYPES仅在您直接使用列值时才有效;对它进行的任何处理,例如通过函数传递,或者算术,或简单地+ReportDate,将丢失声明的类型信息。

这意味着PARSE_DECLTYPES在实践中不是很有用。

如果您真的想使用Python的类型转换器,则应启用PARSE_COLNAMES并在需要时将类型添加到列名称:

SELECT MIN(ReportDate) AS "ReportDate [date]" FROM ...