【问题标题】:Aggregating date column breaks PARSE_DECLTYPES [duplicate]聚合日期分栏符 PARSE_DECLTYPES [重复]
【发布时间】:2014-09-07 16:04:40
【问题描述】:

我有一个 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 保留隐含的日期转换?

【问题讨论】:

标签: python sqlite


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-02-24
    • 2021-02-05
    • 2016-04-07
    • 2013-11-25
    • 1970-01-01
    • 2013-04-03
    • 2019-06-12
    • 2021-07-28
    • 2015-09-06
    相关资源
    最近更新 更多