成功解决:ProgrammingError: (1146, “Table ‘data.datd_all‘ doesn‘t exist“)

发布于:2022-12-14 ⋅ 阅读:(569) ⋅ 点赞:(0)

“第一个人被绑在树上,最后一个人正被蚂蚁吃掉。”

                                                                                                  ——《百年孤独》

 问题描述

使用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即可运行成功!

如下图

 

 


网站公告

今日签到

点亮在社区的每一天
去签到