django之 将字典数据导入数据库以及解决insert自动增长的id不是从1开始或不连续

当我对mysql数据库进行insert插入操作时,发现insert自动增长的id不是从1开始或不连续

这个是我对我的mysql中的数据库zx里的configuration表进行insert字典格式的数据操作的代码:

import json,MySQLdb,pymysql,xlrd,xlwt,sys
from operator import mod
from bs4 import BeautifulSoup
from xlutils.copy import copy
from JobSpider.excel导入数据库 import temp_dict


def write_to_excel(words, filename, sheet_name='sheet1'):
    '''将item存储到excel中。
    :param words: 保存item的list    [{},{}]格式
    :return:
    '''
    try:
        # 1、创建工作薄
        work_book = xlwt.Workbook(encoding='utf-8')
        # 2、创建sheet表单
        sheet = work_book.add_sheet(sheet_name)
        # 3、写表头
        # head = ['英文','中文']
        head = []
        for k in words[0].keys():
            head.append(k)

        for i in range(len(head)):
            sheet.write(0, i, head[i])
        # 4、添加内容
        # 行号
        i = 1
        for item in words:
            for j in range(len(head)):
                sheet.write(i, j, item[head[j]])
            # 写完一行,将行号+1
            i += 1
        # 保存
        work_book.save(filename)
        print('写入excel成功!')
    except Exception as e:
        print('写入excel失败!', e)

def append_to_excel(words, filename):
    ''' 追加数据到excel
    :param words: 【item】 [{},{}]格式
    :param filename: 文件名
    :return:
    '''
    global sum
    try:
        # 打开excel
        word_book = xlrd.open_workbook(filename)
        # 获取所有的sheet表单。
        sheets = word_book.sheet_names()
        # 获取第一个表单
        work_sheet = word_book.sheet_by_name(sheets[0])
        # 获取已经写入的行数
        old_rows = work_sheet.nrows
        # 获取表头信息
        heads = work_sheet.row_values(0)
        # 将xlrd对象变成xlwt
        new_work_book = copy(word_book)
        # 添加内容
        new_sheet = new_work_book.get_sheet(0)
        i = old_rows
        for item in words:
            for j in range(len(heads)):
                new_sheet.write(i, j, item[heads[j]])
            i += 1
        new_work_book.save(filename)
        sum += 1
        print('追加成功!')
    except Exception as e:
        print('追加失败!', e)

def open_excel(excel_file):
    '''读取excel函数
    args:excel_file(excel文件,目录在py文件同目录)
    returns:book
    '''
    try:
        book = xlrd.open_workbook(excel_file) # 文件名,把文件与py文件放在同一目录下
        print(sys.getsizeof(book))
        return book
    except:
        print("打开excel文件失败!!")



if __name__ == '__main__':

    dict = [{
                "level": "phase",
                "id": 1,
                "content": {
                    "period": 149,
                    "green_st": 0,
                    "green_end": 67.05,
                    "greenrate": 0.45
                }
            },
            {
                "level": "phase",
                "id": 2,
                "content": {
                    "period": 149,
                    "green_st": 67.05,
                    "green_end": 74.5,
                    "greenrate": 0.05
                }
            },
            {
                "level": "phase",
                "id": 3,
                "content": {
                    "period": 149,
                    "green_st": 74.5,
                    "green_end": 141.55,
                    "greenrate": 0.35
                }
            },
            
            {
                "level": "phase",
                "id": 3,
                "content": {
                    "period": 132,
                    "green_st": 66.0,
                    "green_end": 85.8,
                    "greenrate": 0.32
                }
            },
            {
                "level": "phase",
                "id": 4,
                "content": {
                    "period": 132,
                    "green_st": 85.8,
                    "green_end": 132,
                    "greenrate": 0.35
                }
            },
            {
                "level": "phase",
                "id": 1,
                "content": {
                    "period": 100,
                    "green_st": 0,
                    "green_end": 31.0,
                    "greenrate": 0.31
                }
            },
            {
                "level": "phase",
                "id": 2,
                "content": {
                    "period": 100,
                    "green_st": 31.0,
                    "green_end": 50.0,
                    "greenrate": 0.19
                }
            },
            {
                "level": "phase",
                "id": 3,
                "content": {
                    "period": 100,
                    "green_st": 50.0,
                    "green_end": 81.0,
                    "greenrate": 0.22
                }
            },
            {
                "level": "phase",
                "id": 4,
                "content": {
                    "period": 100,
                    "green_st": 81.0,
                    "green_end": 100,
                    "greenrate": 0.19
                }
            },
            {
                "level": "phase",
                "id": 1,
                "content": {
                    "period": 103,
                    "green_st": 0,
                    "green_end": 44.29,
                    "greenrate": 0.43
                }
            },
            {
                "level": "phase",
                "id": 2,
                "content": {
                    "period": 103,
                    "green_st": 44.29,
                    "green_end": 51.5,
                    "greenrate": 0.07
                }
            },
            {
                "level": "phase",
                "id": 3,
                "content": {
                    "period": 103,
                    "green_st": 51.5,
                    "green_end": 95.78999999999999,
                    "greenrate": 0.21
                }
            },
            {
                "level": "phase",
                "id": 4,
                "content": {
                    "period": 103,
                    "green_st": 95.78999999999999,
                    "green_end": 103,
                    "greenrate": 0.07
                }
            },
            {
                "level": "phase",
                "id": 1,
                "content": {
                    "period": 128,
                    "green_st": 0,
                    "green_end": 46.08,
                    "greenrate": 0.36
                }
            },
            {
                "level": "phase",
                "id": 2,
                "content": {
                    "period": 128,
                    "green_st": 46.08,
                    "green_end": 64.0,
                    "greenrate": 0.14
                }
            },
            {
                "level": "phase",
                "id": 3,
                "content": {
                    "period": 128,
                    "green_st": 64.0,
                    "green_end": 110.08,
                    "greenrate": 0.45
                }
            },
            {
                "level": "phase",
                "id": 4,
                "content": {
                    "period": 128,
                    "green_st": 110.08,
                    "green_end": 128,
                    "greenrate": 0.14
                }
            },
            {
                "level": "phase",
                "id": 1,
                "content": {
                    "period": 132,
                    "green_st": 0,
                    "green_end": 34.32,
                    "greenrate": 0.26
                }
            },
            {
                "level": "phase",
                "id": 2,
                "content": {
                    "period": 132,
                    "green_st": 34.32,
                    "green_end": 66.0,
                    "greenrate": 0.24
                }
            },
            {
                "level": "phase",
                "id": 3,
                "content": {
                    "period": 132,
                    "green_st": 66.0,
                    "green_end": 100.32,
                    "greenrate": 0.39
                }
            },
            {
                "level": "phase",
                "id": 4,
                "content": {
                    "period": 132,
                    "green_st": 100.32,
                    "green_end": 132,
                    "greenrate": 0.24
                }
            },
            {
                "level": "phase",
                "id": 1,
                "content": {
                    "period": 134,
                    "green_st": 0,
                    "green_end": 28.14,
                    "greenrate": 0.21
                }
            },
            {
                "level": "phase",
                "id": 2,
                "content": {
                    "period": 134,
                    "green_st": 28.14,
                    "green_end": 67.0,
                    "greenrate": 0.29
                }
            },
            {
                "level": "phase",
                "id": 3,
                "content": {
                    "period": 134,
                    "green_st": 67.0,
                    "green_end": 95.14,
                    "greenrate": 0.4
                }
            },
            {
                "level": "phase",
                "id": 4,
                "content": {
                    "period": 134,
                    "green_st": 95.14,
                    "green_end": 134,
                    "greenrate": 0.29
                }
            },
            {
                "level": "phase",
                "id": 1,
                "content": {
                    "period": 120,
                    "green_st": 0,
                    "green_end": 30.0,
                    "greenrate": 0.25
                }
            },
            {
                "level": "phase",
                "id": 2,
                "content": {
                    "period": 120,
                    "green_st": 30.0,
                    "green_end": 60.0,
                    "greenrate": 0.25
                }
            },
            {
                "level": "phase",
                "id": 3,
                "content": {
                    "period": 120,
                    "green_st": 60.0,
                    "green_end": 90.0,
                    "greenrate": 0.39
                }
            },
            {
                "level": "phase",
                "id": 4,
                "content": {
                    "period": 120,
                    "green_st": 90.0,
                    "green_end": 120,
                    "greenrate": 0.25
                }
            },
            {
                "level": "phase",
                "id": 1,
                "content": {
                    "period": 102,
                    "green_st": 0,
                    "green_end": 36.72,
                    "greenrate": 0.36
                }
            },
            {
                "level": "phase",
                "id": 2,
                "content": {
                    "period": 102,
                    "green_st": 36.72,
                    "green_end": 51.0,
                    "greenrate": 0.14
                }
            },
            {
                "level": "phase",
                "id": 3,
                "content": {
                    "period": 102,
                    "green_st": 51.0,
                    "green_end": 87.72,
                    "greenrate": 0.29
                }
            },
            {
                "level": "phase",
                "id": 4,
                "content": {
                    "period": 102,
                    "green_st": 87.72,
                    "green_end": 102,
                    "greenrate": 0.14
                }
            },
            {
                "level": "phase",
                "id": 1,
                "content": {
                    "period": 122,
                    "green_st": 0,
                    "green_end": 28.06,
                    "greenrate": 0.23
                }
            },
            {
                "level": "phase",
                "id": 2,
                "content": {
                    "period": 122,
                    "green_st": 28.06,
                    "green_end": 61.0,
                    "greenrate": 0.27
                }
            },
            {
                "level": "phase",
                "id": 3,
                "content": {
                    "period": 122,
                    "green_st": 61.0,
                    "green_end": 89.06,
                    "greenrate": 0.16
                }
            },
            {
                "level": "phase",
                "id": 4,
                "content": {
                    "period": 122,
                    "green_st": 89.06,
                    "green_end": 122,
                    "greenrate": 0.27
                }
            },
            {
                "level": "phase",
                "id": 1,
                "content": {
                    "period": 99,
                    "green_st": 0,
                    "green_end": 37.62,
                    "greenrate": 0.38
                }
            },
            {
                "level": "phase",
                "id": 2,
                "content": {
                    "period": 99,
                    "green_st": 37.62,
                    "green_end": 49.5,
                    "greenrate": 0.12
                }
            },
            {
                "level": "phase",
                "id": 3,
                "content": {
                    "period": 99,
                    "green_st": 49.5,
                    "green_end": 87.12,
                    "greenrate": 0.37
                }
            },
            {
                "level": "phase",
                "id": 4,
                "content": {
                    "period": 99,
                    "green_st": 87.12,
                    "green_end": 99,
                    "greenrate": 0.12
                }
            },
            {
                "level": "phase",
                "id": 1,
                "content": {
                    "period": 127,
                    "green_st": 0,
                    "green_end": 39.37,
                    "greenrate": 0.31
                }
            },
            {
                "level": "phase",
                "id": 2,
                "content": {
                    "period": 127,
                    "green_st": 39.37,
                    "green_end": 63.5,
                    "greenrate": 0.19
                }
            },
            {
                "level": "phase",
                "id": 3,
                "content": {
                    "period": 127,
                    "green_st": 63.5,
                    "green_end": 102.87,
                    "greenrate": 0.34
                }
            },
            {
                "level": "phase",
                "id": 4,
                "content": {
                    "period": 127,
                    "green_st": 102.87,
                    "green_end": 127,
                    "greenrate": 0.19
                }
            },
            
            
             {
                "level": "phase",
                "id": 2,
                "content": {
                    "period": 137,
                    "green_st": 26.03,
                    "green_end": 68.5,
                    "greenrate": 0.31
                }
            },
            {
                "level": "phase",
                "id": 3,
                "content": {
                    "period": 137,
                    "green_st": 68.5,
                    "green_end": 94.53,
                    "greenrate": 0.2
                }
            }
        }
    ]
    # write_to_excel(dict,'effect.xlsx')
    # 创建数据库连接
    conn = MySQLdb.connect(host='localhost', user='root', passwd='123456', db='zx', port=3306, charset='utf8')
    # 创建数据库游标对象cursor
    cur = conn.cursor()
    temp_dict = {}
    n = 1
    for li in dict:
        temp_dict['level'] = li['level']
        temp_dict['effect_id'] = li['id'] / 15 + 1
        temp_dict['period'] = li['content']['period']
        temp_dict['green_st'] = li['content']['green_st']
        temp_dict['green_end'] = li['content']['green_end']
        temp_dict['greenrate'] = li['content']['greenrate']
        temp_dict['effect_optimized_id'] = mod(li['id'],15)
        n += 1

        # 表名需修改
        table = "configuration"  # 表名
        keys = ','.join(temp_dict.keys())  # 列字段
        values = ', '.join(['%s'] * len(temp_dict))  # 行字段
        sql = 'insert into {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
        # 将字段的value转化为元祖存入
        cur.execute(sql, tuple(temp_dict.values()))
        conn.commit()
        # 关闭游标
    cur.close()
    # 关闭数据库连接
    conn.close()

出现这种现象的原因是:

原因:

1.insert 失败后,id 已自动增加,会造成 id 不连续

2.delete 后,再重新插入数据后,id 会从删除前最后的 id 开始增加,造成 id 不是从1开始增加

当mysql数据库中的表被清空后,但是insert新插入的数据的id不是从1开始, 可以试试这个方法,亲测有效!!

解决方法:

 我是在Navicate Premium15中进行mysql数据库的可视化的,

(1)先打开Navicate Premium15,连接好数据库之后,点击“新建查询”,就会出现这么一个页面:

 (2)在这个新建的查询页面里,输入命令:

truncate table table_name[表名];

注意:这块儿要写入自己数据库中存在的表名,不然会报错。 写入之后检查一遍是否写对。

(3)点击旁边的“运行”按钮之后,再次点开我的数据库zx中的表configuration,

发现这个id不是从1开始的问题消失了,好了,问题成功解决!!

 OK,问题解决。

猜你喜欢

转载自blog.csdn.net/qq_45956730/article/details/124618830