问题描述
我是 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 (将#修改为@)