pyodbc 和 sql 服务器,将 datetime.date 应用于 DATE 列

pyodbc and sql server, apply datetime.date to DATE column

pyodbc 可以很好地处理 datetime.datetime 具有 DATETIME 列的对象。无需特殊格式。
但它因 datetime.date 个对象和 DATE 列而失败:[HY004] [FreeTDS][SQL Server]Invalid data type (0) (SQLBindParameter)

一种方法是使用 .isoformat() 方法将 datetime.date 对象作为字符串插入。

但是:

d1 = dt.date.today()
d2 = dt.datetime.now()
print(isinstance(d1, dt.date))
print(isinstance(d1, dt.datetime))
print(isinstance(d2, dt.date))
print(isinstance(d2, dt.datetime))

returns

True
False
True
True

没有比这样测试更好的方法了吗?

if isinstance(d1, dt.date) and not isinstance(d1, dt.datetime):
    d1 = d1.isoformat()

我能够在 FreeTDS 0.91 下重现您的问题,这是 apt install tdsodbc 在 Ubuntu 下分发的版本。但是,我能够成功地使用 datetime.date 参数值来使用

填充 DATE 列
  • FreeTDS 的最新稳定版本(当前为 01.00.0080),或
  • 微软的"ODBC Driver 13 for SQL Server"