如何使用python pyodbc模块更新MSSQL中的datetime字段

如何使用python pyodbc模块更新MSSQL中的datetime字段,python,sql-server,datetime,pyodbc,Python,Sql Server,Datetime,Pyodbc,我正试图使用convert(datetime,'19-01-16 11:34:09 PM',5)更新DB表,但当我将此作为字符串传递以插入DB表时,我得到了数据类型转换错误 从字符串转换日期和/或时间时,转换失败 您将得到一个错误,因为您正在将其作为字符串值进行传递。相反: insert into Run(RunID, StartDate) values ('19012016', convert(datetime, '19-01-16 11:34:09 PM', 5)) 也就是说,你

我正试图使用convert(datetime,'19-01-16 11:34:09 PM',5)更新DB表,但当我将此作为字符串传递以插入DB表时,我得到了数据类型转换错误

从字符串转换日期和/或时间时,转换失败


您将得到一个错误,因为您正在将其作为字符串值进行传递。相反:

insert into Run(RunID, StartDate) 
    values ('19012016', convert(datetime, '19-01-16 11:34:09 PM', 5))
也就是说,你引用的引用太多了。在Python中,这通常写为:

"""insert into Run(RunID, StartDate) 
    values ('19012016', convert(datetime, '19-01-16 11:34:09 PM', 5))"""
如果要插入值,请执行以下操作:

"""insert into Run(RunID, StartDate) 
    values ('{0}', convert(datetime, '{1}', 5))""".format("19012016", "19-01-16 11:34:09 PM")

我建议你使用一个更常见的格式,比如YYYY-MMD DHH:MM:SS,如果你有一个日期表示的选择。

使用T-SQL将字符串值转换成DATETIME值可能是错误的,尤其是如果你必须考虑不同的区域和时区。 不要使用T-SQL进行转换,而要与本机值一起使用。Python提供了比T-SQL更大的灵活性


请参阅我的答案,以获取将Python日期时间值与pyodbc参数一起使用的示例。

如果我删除引号(“),我将尝试使用Python脚本cur=con.cursor()cur.execute(插入到Run(RunID,StartDate)值('19012016',“convert(datetime,'19-01-16 11:34:09 PM',5)”)进行更新,我将获得错误为-NameError:未定义全局名称“convert”
"""insert into Run(RunID, StartDate) 
    values ('{0}', convert(datetime, '{1}', 5))""".format("19012016", "19-01-16 11:34:09 PM")