SQL Server datetime столбцы могут хранить только доли секунды с точностью до миллисекунда (3 знака после запятой).Когда вы делаете
some_time = datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')
, вы получаете строку, отформатированную с точностью до Python datetime
, которая составляет микросекунды (6 десятичных знаков)
>>> some_time
'2018-09-28 16:38:14.344801'
, а SQL-сервер не любитдополнительные три знака после запятой.
Решение состоит в том, чтобы не форматировать datetime
в виде строки, просто передайте само значение datetime
в собственном параметризованном запросе
query = "insert into table_a (date_created) values (?)"
params = (datetime.datetime.utcnow(), )
cur.execute(query, params)