我正在使用pypyodbc将新记录插入到MS SQL Server表中,并使用下面的参数化查询。
我在下面列出了表格结构。对于执行查询,我在运行时添加了调试值的内联注释。
$task->save();
我收到以下错误:
ProgrammingError:(u' 42000',u' [42000] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]不允许从数据类型smalldatetime到float的隐式转换。使用CONVERT运行此查询的函数。')
我已经调试了好几个小时,并且不了解出了什么问题。我相信当我将MinRate和MaxRate列添加到表中时会出现问题,因此假设浮点数无法使用参数化查询正确转换。
表结构如下:
sql_statement = """
INSERT INTO [hr].[VMS.Requisitions]
(VMSRequisitionID,
JobTitle,
HiringManagerEEID,
GroupID,
DepartmentID,
LocationID,
MinRate,
MaxRate,
LaborTypeID,
RequisitionStatusID,
Openings,
OpeningsRemaining,
RequisitionCreateDate,
RequisitionApproveDate,
RequisitionOpenDate,
RequisitionCloseDate,
CreateDate,
ModifyDate)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"""
cursor.execute(sql_statement,(requisition.VMSRequisitionID, # {unicode} 'xxx'
requisition.JobTitle, # {unicode} 'xxx'
requisition.HiringManagerEEID, # {int} 3
requisition.GroupID, # {int} 36
requisition.DepartmentID, # {int} 189
requisition.LocationID, # {int} 44
requisition.MinRate, # {float} 33.5
requisition.MaxRate, # {float} 50.24
requisition.LaborTypeID, # {int} 5
requisition.RequisitionStatusID, # {int} 9
requisition.Openings, # {int} 11
requisition.OpeningsRemaining, # {int} 11
requisition.RequisitionCreateDate, # {datetime} 2017-07-10 11:41:36
requisition.RequisitionApproveDate, # {NoneType} None
requisition.RequisitionOpenDate, # {NoneType} None
requisition.RequisitionCloseDate, # {NoneType} None
now, # {str} '2017-10-04T12:37:14'
now, # {str} '2017-10-04T12:37:14'
))
cursor.commit()
有什么想法?我使用的是Python 2.7和pypyodbc 1.3.3。