在python中执行executemany命令时出现KeyError
Posted
技术标签:
【中文标题】在python中执行executemany命令时出现KeyError【英文标题】:Getting KeyError while executing executemany command in python 【发布时间】:2018-06-11 00:35:58 【问题描述】:Python 代码
import pymysql
import xlrd
import re
import os
import csv
conn = pymysql.connect(host='',
user='',
password='',
db='',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
sql = "INSERT INTO `webscrap_wunderground` (Date,MeanTemp,MaxTemp,MinTemp,HeatingDegree,DewPoint,MeanHumidity,MaxHumidity,MinHumidity,Precipitation,SeaLevel,MeanWindSpeed,MaxWind_Speed,Visibility,Event) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
with open('C:/Users/SARIKA/Weather Data.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row)
cur = conn.cursor()
cur.executemany(sql,[(row['Date'],row['Mean Temperature'],row['Max Temperature'],row['Min Temperature'],row['Heating Degree Days'],row['Dew Point'],row['MeanHumidity'],row['MaxHumidity'],row['MinHumidity'],row['Precipitation'],row['SeaLevel'],row['MeanWindSpeed'],row['MaxWindSpeed'],row['visibility'],row['Events'])])
conn.escape_string(sql)
conn.commit()
这是我在执行上述代码时遇到的错误。 CSV 文件被正确读取,因为我有打印行,如下所示。但是在数据库表中插入数据时会出现错误。我认为csv和数据库之间的映射存在问题,但我找不到错误请帮助。
OrderedDict([('Date', '2017/1/1'), ('Mean Temperature', '24'), ('Max Temperature', '31'), ('Min Temperature', '16'), ('Heating Degree Days', 'N/A'), (' Dew Point', '16'), (' Average Humidity', '53'), (' Max Humidity', '83'), (' Minimum Humidity', '27'), (' Precipitation', '0.0'), (' Sea Level Pressure', '1012.73'), (' Average Wind Speed', '4'), (' Maximum Wind Speed', '17'), (' Visibility', '2.0'), (' Events', '')])
Traceback (most recent call last):
File "C:\Users\SARIKA\eclipse-workspace\a1\csvtosql.py", line 20, in <module>
cur.executemany(sql,[(row['Date'],row['Mean Temperature'],row['Max Temperature'],row['Min Temperature'],row['Heating Degree Days'],row['Dew Point'],row['MeanHumidity'],row['MaxHumidity'],row['MinHumidity'],row['Precipitation'],row['SeaLevel'],row['MeanWindSpeed'],row['MaxWindSpeed'],row['visibility'],row['Events'])])
KeyError: 'Dew Point'
CSV 文件
数据库表结构
【问题讨论】:
【参考方案1】:查看您的输出,CSV 的列称为“露点”,在“D”之前有一个空格。像这样引用它(即row[' Dew Point']
)应该可以修复错误。
【讨论】:
非常感谢先生,我的问题只因您而解决!非常感谢 我再次遇到另一个问题,csv 文件中的日期类似于 dd-mm-yy 格式,但它错误地写入了数据库。例如,csv 中的日期是 30-07-17,但插入时的日期相同数据库为 2030-07-17。表示 yy 字段在写入数据库时被视为 dd。我该如何解决这个问题 cur.executemany(sql,[(datetime.datetime.strptime(row['Date'],'%d-%m-%Y').strftime('%Y-%m- %d'),row['Mea....................... 续。#Error: File "C:\python3\lib_strptime.py", line 565, in _strptime_datetime tt, fraction = _strptime(data_string, format) File "C:\python3\lib_strptime.py", line 362, in _strptime (data_string, format)) ValueError: time data '2017/1/1' does not match format ' %d-%m-%Y' cant resolve r ValueError: time data '2017/1/1' does not match format '%d-%m-%y' 请帮助@Mureinik以上是关于在python中执行executemany命令时出现KeyError的主要内容,如果未能解决你的问题,请参考以下文章
如何在 CrateDB 中使用 python 执行批量插入?
Linux上的pyodbc fast_executemany在插入时出现乱码
在 sql.executemany(... '(' 附近的语法错误
如何在 9.414 版本中使用 executemany 忽略 postgres 中的重复项?