关于python:pyodbc和sql server,将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对象作为字符串插入。

但:

1
2
3
4
5
6
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))

回报

1
2
3
4
True
False
True
True

是不是有比这样的测试更好的方法?

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


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

  • FreeTDS的最新稳定版本(目前为01.00.0080),或
  • 微软的"用于SQL Server的ODBC驱动程序13"