https://www.cnblogs.com/longbigbeard/p/9309180.html

  • 因为需要对数据处理,将excel数据导入到数据库,记录一下过程。
  • 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt)
  • 直接丢代码,使用python3,注释比较清楚。
  • 1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    import xlrd

    import pymysql

    # import importlib

    # importlib.reload(sys) #出现呢reload错误使用

    def open_excel():

        try:

            book = xlrd.open_workbook("XX.xlsx")  #文件名,把文件与py文件放在同一目录下

        except:

            print("open excel file failed!")

        try:

            sheet = book.sheet_by_name("sheet名称")   #execl里面的worksheet1

            return sheet

        except:

            print("locate worksheet in excel failed!")

    #连接数据库

    try:

        db = pymysql.connect(host="127.0.0.1",user="root",

            passwd="XXX",

            db="XXX",

            charset='utf8')

    except:

        print("could not connect to mysql server")

    def search_count():

        cursor = db.cursor()

        select = "select count(id) from XXXX" #获取表中xxxxx记录数

        cursor.execute(select) #执行sql语句

        line_count = cursor.fetchone()

        print(line_count[0])

    def insert_deta():

        sheet = open_excel()

        cursor = db.cursor()

        for in range(1, sheet.nrows): #第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是1

            name = sheet.cell(i,0).value #取第i行第0列

            data = sheet.cell(i,1).value#取第i行第1列,下面依次类推

            print(name)

            print(data)

            value = (name,data)

            print(value)

            sql = "INSERT INTO XXX(name,data)VALUES(%s,%s)"

            cursor.execute(sql,value) #执行sql语句

            db.commit()

        cursor.close() #关闭连接

    insert_deta()

    db.close()#关闭数据

    print ("ok ")

      XXX里自行修改自己的名称。

  • 说明:对于不规则的单元格,例如合并过的单元格会取到空值。
  • 有机会把数据库写到excel贴上来。
  • 优化了一下这个程序
  • 1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    import pymysql

    import xlrd

    # 连接数据库

    try:

        db = pymysql.connect(host="127.0.0.1", user="root",

                             passwd="XXX",

                             db="XXX",

                             charset='utf8')

    except:

        print("could not connect to mysql server")

    def open_excel():

        try:

            book = xlrd.open_workbook("XXX.xlsx")  #文件名,把文件与py文件放在同一目录下

        except:

            print("open excel file failed!")

        try:

            sheet = book.sheet_by_name("XXX")   #execl里面的worksheet1

            return sheet

        except:

            print("locate worksheet in excel failed!")

    def insert_deta():

        sheet = open_excel()

        cursor = db.cursor()

        row_num = sheet.nrows

        for in range(1, row_num):  # 第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是1

            row_data = sheet.row_values(i)

            value = (row_data[0],row_data[1],row_data[2],row_data[3])

            print(i)

            sql = "INSERT INTO demo_yangben(xxx,xxxx,xxxx,xxxx)VALUES(%s,%s,%s,%s)"

            cursor.execute(sql, value)  # 执行sql语句

            db.commit()

        cursor.close()  # 关闭连接

    open_excel()

    insert_deta()

      

  • 再改一下,每一万条数据写入到数据库一次
  • 1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    import pymysql

    import xlrd

    import sys

    '''

        连接数据库

        args:db_name(数据库名称)

        returns:db

    '''

    def mysql_link(de_name):

        try:

            db = pymysql.connect(host="127.0.0.1", user="xxx",

                                 passwd="xxx",

                                 db=xxx,

                                 charset='utf8')

            return db

        except:

            print("could not connect to mysql server")

    '''

        读取excel函数

        args:excel_file(excel文件,目录在py文件同目录)

        returns:book

    '''

    def open_excel(excel_file):

        try:

            book = xlrd.open_workbook(excel_file)  # 文件名,把文件与py文件放在同一目录下

            print(sys.getsizeof(book))

            return book

        except:

            print("open excel file failed!")

    '''

        执行插入操作

        args:db_name(数据库名称)

             table_name(表名称)

             excel_file(excel文件名,把文件与py文件放在同一目录下)

    '''

    def store_to(db_name, table_name, excel_file):

        db = mysql_link(db_name)  # 打开数据库连接

        cursor = db.cursor()  # 使用 cursor() 方法创建一个游标对象 cursor

        book = open_excel(excel_file)  # 打开excel文件

        sheets = book.sheet_names()  # 获取所有sheet表名

        for sheet in sheets:

            sh = book.sheet_by_name(sheet)  # 打开每一张表

            row_num = sh.nrows

            print(row_num)

            list = []  # 定义列表用来存放数据

            num = 0  # 用来控制每次插入的数量

            for in range(1, row_num):  # 第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是1

                row_data = sh.row_values(i)  # 按行获取excel的值

                value = (row_data[0], row_data[1], row_data[2], row_data[3], row_data[4], row_data[5], \

                         row_data[6], row_data[7], row_data[8], row_data[9], row_data[10], row_data[11], row_data[12],

                         row_data[13], row_data[14])

                list.append(value)  # 将数据暂存在列表

                num += 1

                if( num>= 10000 ):  # 每一万条数据执行一次插入

                    print(sys.getsizeof(list))

                    sql = "INSERT INTO " + table_name + " (time, xingbie, afdd, xzb, yzb, cfbj, jjlbmc, \

                    bjlbmc, bjlxmc, bjlxxlmc, gxqymc,gxdwmc, afql, afxqxx, cjdwmc)\

                    VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"

                    cursor.executemany(sql, list)  # 执行sql语句

                    num = 0  # 计数归零

                    list.clear()  # 清空list

                    print("worksheets: " + sheet + " has been inserted 10000 datas!")

        print("worksheets: " + sheet + " has been inserted " + str(row_num) + " datas!")

        db.commit()  # 提交

        cursor.close()  # 关闭连接

        db.close()

    if __name__ == '__main__':

        store_to('demo''demo_yangben''xxx.xlsx')

      

  • 思考,如果数据插入有错误,怎么解决,
  • 其实有很多数据库工具可以直接来解决这个问题,注意字符转换的格式就好。
  • 上面这个程序在当数据不足10000的时候会出现问题,下面的一篇文章里进行了更正。
  • 批量插入数据请看: https://www.cnblogs.com/longbigbeard/p/9317141.html
  • 以上。

使用python将excel数据导入数据库相关推荐

  1. python将EXCEL数据导入数据库时日期型数据变成数字并加.0的问题一行代码解决方案方案

    [问题描述]:python将EXCEL数据导入数据库时日期变成文本型数据并显示为数字格式 [解决方案] 数据源: codes: #!/usr/bin/python3 -- coding: utf-8 ...

  2. python接入excel_使用python将excel数据导入数据库过程详解

    因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接丢代码,使用python3,注释比较清楚. ...

  3. python将excel数据导入ppt_使用python将excel数据导入数据库

    因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接丢代码,使用python3,注释比较清楚. ...

  4. Python实现Excel数据导入MySQL

    前言 近年来,数据分析正在改变我们的工作方式,数据分析的相关工作也越来越受到人们的青睐.很多编程语言都可以做数据分析,比如Python.B.Matlab等,Python凭借着自身无可比拟的优势,被广泛 ...

  5. 转:[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!...

    引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...

  6. Excel数据导入数据库(Java)

    Excel 文件数据导入数据库 首先说明下读写Excel三种常用的技术: POI : 效率高,操作相对JXL复杂,支持公式,宏,图像图表,一些企业应用上会比较实用.能够修饰单元格属性.字体 数字 日期 ...

  7. ssis 导入excel_使用SSIS包将MS Excel数据导入数据库

    ssis 导入excel The easiest way to import the data into the SQL database is using the Import Data wizar ...

  8. 如何用Java将excel数据导入数据库

    近写了点关于将excel导入数据库的代码,当然也可以看做是对前面所介绍的小项目进行补充所做的准备.我一般都是先完成功能,然后将其封装成块,再添加到项目中,个人癖好不值得借鉴.项目中关于解析excel数 ...

  9. EXCEL数据导入数据库

    1.类设计,EXCEL要据配置读入DATASET using System; using System.Data; using System.Collections; using System.Dat ...

最新文章

  1. V3S代码整合中遇到的一个奇怪问题
  2. android4.0 菜单,三大主流安卓4.0界面解析 MIUI最实用
  3. python执行shell脚本、执行mongodb_mongodb执行js脚本(一)---shell执行
  4. C++-string常用函数整理(建议收藏)
  5. Java内存分析—栈,堆,方法区
  6. 两部委联合查处一批网店侵权 淘宝易趣成重灾区
  7. TCN-时间卷积网络
  8. 车路协同发展挑战与影响解析
  9. Http——Post上传文件并传递其他参数信息
  10. ROS Dst-Nat 后内网不能通过公网IP访问内网服务器解决方法
  11. 程序员英语学习指南(建议收藏)
  12. Unity之AB包的创建加载
  13. 基于POP3协议收取邮件
  14. 一份超详细的UI设计规范全攻略
  15. pycharm的 crtl + r 使用正则表达式进行 request-header格式更改
  16. GATE V9.0安装指南
  17. 2015年百度之星程序设计大赛 - 初赛(2)
  18. 20-软通动力信息技术股份有限公司-info
  19. Bootstrap栅格布局
  20. 上海交通大学考博:过来人的考博考经验【zz】

热门文章

  1. Python自动化运维工具fabric的安装
  2. iOS应用国际化教程(2014版)
  3. Linux从入门到精通系列之PPTP
  4. 2013年28周信息安全汇总(7.7 - 7.13)
  5. flink 检查点_Flink检查点和恢复
  6. 蓝牙耳机音量大解决办法_长时间使用蓝牙耳机的危害这么大?我们到底该选什么蓝牙耳机呢?...
  7. 平台api对数据收集的影响_收集您的数据不是那么怪异的api
  8. opencv:边缘检测之Laplacian算子思想及实现
  9. kotlin数据库_如何在Kotlin应用程序中使用Xodus数据库
  10. 事件捕获(capture)和冒泡事件(Bubble)