Я использую pypyodbc для вставки новой записи в таблицу MS SQL Server с параметризованным запросом ниже.
Я включил структуру таблицы ниже. Для запроса на выполнение я добавил встроенные комментарии значений отладки во время выполнения.
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()
Я получаю следующую ошибку:
ProgrammingError: (u'42000', u'[42000] [Microsoft] [драйвер ODBC SQL Server] [SQL Server] Неявное преобразование из типа данных smalldatetime в float не допускается. Используйте функцию CONVERT для запуска этого запроса.')
Я отлаживал это часами и не понимаю, что происходит не так. Я считаю, что проблема возникла, когда я добавил в таблицу столбцы MinRate и MaxRate, поэтому предположим, что существует проблема с неправильным преобразованием чисел с плавающей запятой с использованием параметризованного запроса.
Структура таблицы следующая:
RequisitionID int Primary Key, Identity Column / Auto-increment
VMSRequisitionID varchar(255) Required
JobTitle varchar(255) Required
HiringManagerEEID int NULLs allowed
GroupID int NULLs allowed
DepartmentID int NULLs allowed
LocationID int NULLs allowed
MinRate float NULLs allowed
MaxRate float NULLs allowed
LaborTypeID int NULLs allowed
RequisitionStatusID int NULLs allowed
Openings int NULLs allowed
OpeningsRemaining int NULLs allowed
RequisitionCreateDate datetime NULLs allowed
RequisitionApproveDate datetime NULLs allowed
RequisitionOpenDate datetime NULLs allowed
RequisitionCloseDate datetime NULLs allowed
CreateDate datetime Required
ModifyDate datetime Required
Есть предположения? Я использую Python 2.7 и pypyodbc 1.3.3.
exec sp_columns yourTable;
- person Loïc   schedule 05.10.2017type(requisition.MinRate)
возвращает<type 'float'>
...? - person Gord Thompson   schedule 06.10.2017