【问题标题】:Getting KeyError while executing executemany command in python在python中执行executemany命令时出现KeyError
【发布时间】: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 文件

数据库表结构

【问题讨论】:

    标签: mysql csv keyerror executemany


    【解决方案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
    猜你喜欢
    • 2023-01-08
    • 1970-01-01
    • 2012-05-30
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多