【问题标题】:Unable to get null in datetime column Python无法在日期时间列 Python 中获取空值
【发布时间】:2017-12-20 11:12:14
【问题描述】:

我在 SybaseASE 数据库中有一个包含多个 varchar 和 datetime 字段的表 ServerHistory,我正在使用 pyodbc 库从我的 Python 代码库连接到数据库。

该表允许空日期时间,并且有一些记录,其中 updDate 为空,但是当我从 Python 执行 sql 以读取此类记录时,我永远不会在 updDate 字段中得到空值。

取而代之的是,它获取先前日期时间字段 liveDate 的值并将其填充为 updDate。如果我只选择 updDate,它会给我一个 ValueError“年份 0/任何编号超出范围”。

connection=pyodbc.connect('connection_str') results=connection.execute("select updDate from ServerHistory where server=\'srvr1\'").fetchone()

ValueError: 31728 年超出范围

我相信错误可能会发生,因为根据sqlalchemy can't read null dates from sqlite3 (0000-00-00): ValueError: year is out of range,Python 不允许低于最小年份 1 的时间@

尽管如此,我仍然不明白如何解决我的问题,以便在执行查询时将 null 作为日期时间。

【问题讨论】:

  • 请分享您尝试过的内容(代码)。阅读有关如何在 SO 上提问的帮助页面。
  • 您可以尝试使用 pyodbc Output Converter function 来捕获原始字节,如果字节对应于 Python 的 datetime 无法处理的日期/时间,则返回 None

标签: python-3.x pyodbc


【解决方案1】:

Hack-Ish:

当您使用从 pyodbc 收集的数据时,在 select updDate, .. from ... 的位置使用 coalesce(updDate , date('0001/01/01'),并将任何此类 updDate 视为 None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2019-01-21
    • 2020-10-22
    • 2012-08-30
    • 2015-11-06
    • 1970-01-01
    • 2018-05-24
    相关资源
    最近更新 更多