插入CSV数据时“转换日期时转换失败”

时间:2017-09-06 17:22:16

标签: python sql-server database csv pyodbc

我正在尝试使用以下代码从CSV将数据插入到SQL表中:

with requests.get(reportURL) as csvfile:
    decoded_content=csvfile.content.decode('utf-8')
    reader = csv.reader(decoded_content.splitlines(), delimiter=',')
    columns = next(reader,None)
    query = "INSERT INTO SQL_TABLE({0}) VALUES ({1})"
    query = query.format('[{0}]'.format('],['.join(columns)),','.join('?'*len(columns)))
    cursor = cnxn.cursor()
    cursor.execute(query, columns)
    for data in reader:
        cursor.execute(query, data)
    cursor.commit() 

但是,我收到以下错误代码:

  

cursor.execute(query,columns)pyodbc.DataError:('22007','[22007]   [Microsoft] [SQL Server的ODBC驱动程序13] [SQL Server]转换   从字符串转换日期和/或时间时失败。 (241)   (SQLExecDirectW)')

我想知道问题是数据是作为字符串而不是日期传来的吗?日期是第一列,所以我不确定是否有任何其他列会遇到类似的问题。 列如下:

  

日期|广告商|活动|广告组|展示

数据类型:

  

datetime | varchar | varchar | varchar | bigint

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

cursor.execute(query, columns)

您正尝试使用列 names 作为数据执行INSERT语句。 SQL Server抱怨是因为您试图插入值'日期'进入datetime列。删除该语句应该可以解决问题。

答案 1 :(得分:0)

我不知道它是否仍然有用,但是在尝试按特定时间戳记的日期过滤数据库时出现了此错误。 我发现问题出在参考点的数据格式,像这样:'2020-07-26 12:07:22.263000'

解决方案是在几秒钟后使用str(我的日期)[:19]删除访问数据