“第一个人被绑在树上,最后一个人正被蚂蚁吃掉。”
——《百年孤独》
问题描述
使用python中的MySQLdb将字典数据写到MySQL中,因为是之前写的代码,想在重新运行一遍,但是运行后,出现如下报错:
问题解决
上述报错大意为data数据库中,没用data_all的表
发现问题就立即查找,但即使新建表后还是出现这样的问题,于是就从程序中找问题
根据上述报错信息,从连接数据库以及写入数据库两段程序出现的问题,两段程序如下
连接数据库程序
写入程序段
if __name__ == '__main__':
dic = {'ID': '2083cf0a026453a300000001', 'DeviceKey': '19616', 'DeviceID': '40129443', 'NodeID': '1', 'Tem': '27.5', 'Hum': '11.8', 'Lng':'0.0', 'Lat': '0.0', 'CoordinateType': '0', 'IsAlarmData': '0', 'DeviceName': '苹果1', 'RecordTime': '2021-07-07 15:00:39', 'RecordTimeStamp': '1625641239749'}
"""
values = (pymysql.converters.escape_string(dic['ID']),
pymysql.converters.escape_string(dic['DeviceKey']),dic['DeviceID'], pymysql.converters.escape_string(dic['NodeID']), dic['Tem'],
pymysql.converters.escape_string(dic['Hum']), pymysql.converters.escape_string(dic['Lng']),dic['Lat'],
pymysql.converters.escape_string(dic['CoordinateType']), pymysql.converters.escape_string(dic['IsAlarmData']),dic['DeviceName'],
pymysql.converters.escape_string(dic['RecordTime']), pymysql.converters.escape_string(dic['RecordTime']),datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
"""
values = (dic['ID'],dic['DeviceKey'],dic["DeviceID"],dic["NodeID"],dic['Tem'],dic['Hum'],
dic["Lng"],dic["Lat"],dic["CoordinateType"],dic["IsAlarmData"],dic["DeviceName"],
dic["RecordTime"],dic["RecordTimeStamp"])
sql = """
insert into all(ID,DeviceKey,DeviceID,NodeID,Tem,Hum,
Lng,Lat,CoordinateType,IsAlarmData,DeviceName,RecordTime,RecordTimeStamp)
values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
"""
# data_all是表名
#sql = "insert into users (login,userid) VALUES %s;"
#ret = dic2sql(dic, sql)
# print(ret)
# 连接MySQL,并提交数据
cxn = connect_mysql()
cur = cxn.cursor() #获取操作游标
cur.execute(sql,values)
cxn.commit()
cxn.close()
程序理解
首先对于连接段程序中,常用参数意义如下,
常用参数:
host: 数据库主机名,默认为本地主机
user: 数据库登陆名,默认为当前用户
passwd: 数据库登陆的秘密,默认为空
db: 数据库名,无默认值
port: 数据库端口,默认是3306,数字类型
charset: 数据库编码
其次,数据写入段中,sal语句中 insert into all() 的all是数据库中的表名,如下
总结
数据库名与表名一定要在程序中相互对应,因此将all改为data_all即可运行成功!
如下图