我有一个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保留隐含的日期转换?
答案 0 :(得分:3)
PARSE_DECLTYPES
仅在您直接使用列值时才有效;对它进行的任何处理,例如通过函数传递,或者算术,或简单地+ReportDate
,将丢失声明的类型信息。
这意味着PARSE_DECLTYPES
在实践中不是很有用。
如果您真的想使用Python的类型转换器,则应启用PARSE_COLNAMES
并在需要时将类型添加到列名称:
SELECT MIN(ReportDate) AS "ReportDate [date]" FROM ...