从smalldatetime到float的SQL转换失败

时间:2017-10-04 21:23:51

标签: python sql-server python-2.7 pypyodbc

我正在使用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。

0 个答案:

没有答案