pytds 编码无日期时间导致噩梦

问题描述

我是 Python 新手,遇到了一个问题:

我正在尝试运行一个 MS sql 存储过程,它将表值参数 (tvp) 作为输入,最终将更新数据库中的某些行。

tvp 有 4 列:int、datetime、datetime 和 nvarchar(50)。

我正在将主列表分解成批次发送到数据库以缩短执行时间。

tvp 中有一个块,其中第一个日期时间字段都是 None。这导致我收到错误:“TypeError:utf_16_le_encode() 参数 1 必须是 str,而不是 datetime.datetime”

但是...如果我完美地对齐批次,使得 tvp 中的每一行都将第一个日期时间设为 None,则不会出现错误,并且对于 None 行和非 None 行,执行都可以完美运行。

如果在第二个字段中混合了日期时间值和 None 值,它总是会返回错误

我还在 sql 中确认我的自定义表类型接受空值,并且确实如此。

这是我的函数 incase 有帮助:

def update_contract(contract_updates):

    with pytds.connect(dsn=SERVER,database=DATABASE,autocommit=True,user=USERNAME,password=PASSWORD) as cnx:

        with cnx.cursor() as cur:

            for row in contract_updates:
                print(row)

            tvp = pytds.TableValuedParam(type_name="dbo.IntDatetimeDatetimeStringTable",rows=contract_updates)

            cur.execute("EXEC SP_UPDATE_CONTRACT %s",(tvp,))

有什么建议或提示吗?谢谢!!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)