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"
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
参数值来使用
- FreeTDS 的最新稳定版本(当前为 01.00.0080),或
- 微软的"ODBC Driver 13 for SQL Server"