使用python将excel数据导入数据库

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
  • 以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

imageDownloader

.h #import <UIKit/UIKit.h> protocol imageDownloadDelegate <NSObject> optional -(void)imageDownloadWithImage:(UIImage *)image; end // 声明一个block 参数类型是UIImage 返回值是void 别名Result typedef void(^Result)(UIImage *img); interface ImageDow…

Android核心分析之二十七Android GDI 之SurfaceFlinger之动态结构示

SurfaceFlinger对象建立过程示意  1 SurfaceSession的建立  客户端请求建立Surface时&#xff0c;首先在要与SurfaceFlinger建立一个Session&#xff0c;然后再Session上建立一个Connection通过概念返回Bclient对象。WindowManagerService在添加第一个窗口前会检查SurfaceS…

maven详解之坐标与依赖

2019独角兽企业重金招聘Python工程师标准>>> 看着简单而又复杂的pom.xml文件&#xff0c;看似熟悉&#xff0c;当自己编写的时候觉得简单&#xff0c;但是看人家项目的时候又觉得复杂的很&#xff0c;现在我们一起来分析这个pom文件。 Maven的坐标为各种构件引入了秩…

修改数据表部分字段方法封装-及-动态生成对象并动态添加属性

代码&#xff1a; //这样写的话&#xff0c;输入的是表的行对象&#xff0c;返回的是数据字典&#xff0c;可以直接用到更新操作里&#xff0c;public static Object AlterDate(Object tabledataobj){List<string> namelist new List<string>();List<Object>…

flask 上传 excel 并导入mysql

参考&#xff1a; flask 文件的上传下载和excel操作 Python 将Excel表格数据导入MySQL数据库

各种无线加密方式

所有的无线网络都提供某些形式的加密。但无线路由器、无线AP、或中继器的无线信号范围很难控制得准确&#xff0c;外界也是很大机会的能访问到该无线网络&#xff0c;一旦他们能访问该内部网络时&#xff0c;该网络中所有是传输的数据对他们来说都是透明的。如果这些数据都没经…

EF6源码学习-准备篇

现在对于。net开发人员来说EF已经很流行了&#xff0c;虽然我在2010年的时候就用过EF&#xff0c;也看过几本书&#xff0c;但是还没有仔细研究EF的code&#xff0c; 曾经也尝试阅读EF5的源代码&#xff0c;后来由于时间关系也没有坚持住。现在计划阅读EF6 code first部分的源码…

flask 对excel上传下载操作和文件处理

文件的下载 from flask import send_from_directory excel_bp.route(/get_attachment/<path:filename>) def get_attachment(filename): return send_from_directory(app.config[UPLOAD_FOLDER],filename,as_attachmentTrue) 文件的上传 &#xff08;1&#xff09;ht…

maven 本地包依赖包打进jar

1.声明依赖jar的时候使用 <dependency> <groupId>test</groupId> <artifactId>test</artifactId> <version>1.1</version> <scope>system</scope> <systemPath>${project.basedir}/lib/a.jar</systemPath> …

xml学习总结(四)

命名空间 &#xff08;1&#xff09;产生 问题&#xff1a;在不同的约束文档中&#xff0c;有不同好安逸的相同标记名称 解决办法 每个约束模式人当被赋予一个唯一的名称空间&#xff0c;每个名称空间可用一个唯一的URI表示 在XML实例中为来自不同模式文档的元素重甲不同的前缀…

Flask入门之上传文件到服务器

https://www.cnblogs.com/wongbingming/p/6802660.html flask 文件的上传下载和excel操作 Flask入门之上传文件到服务器 今天要做一个简单的页面&#xff0c;可以实现将文件 上传到服务器&#xff08;保存在指定文件夹&#xff09; #Sample.py # coding:utf-8from flask i…

ASP入门(十一)-Session小案例

一般来说&#xff0c;在实际开发中&#xff0c;对于 Session 对象使用最多的就是用户登录部分了&#xff0c;这个案例将简单模拟一个用户登录表单、用户是否登录的判断以及用户退出的一系列功能&#xff0c;它一共分了以下几个页面。 Login.asp (用户登录)、Check.asp (用户是否…

智能家居资源汇总

智能家居中红外控制系统通讯协议分析.pdf 智能家居中视频监控系统的设计与实现_林琳.caj 智能家居中视频监控系统设计_董翠英.pdf 智能家居系统——语音识别.pdf 智能家居系统中家庭网关的研究.pdf 智能家居系统中家电控制的研究与实现.kdh 智能家居系统语音遥控器的设计与实现…

sql语句--时间

1.时间的比较&#xff1a;时间是日期类型、字符串类型&#xff0c;long型&#xff0c;直接比较 例&#xff1a; SELECT * FROM student where date1 BETWEEN 2017-09-15 09:07:17 AND 2017-09-15 09:08:19 2.from_unixtime(long型date)&#xff1a;将时间戳转为时间 例&#xf…

JS 判断上传文件是否为EXCEL 文件

<SCRIPT language"JavaScript"> function checkform(o){var f_content form1.file.value;var fileextf_content.substring(f_content.lastIndexOf("."),f_content.length)fileextfileext.toLowerCase()if (fileext!.xls){alert("对不起&#x…

[转]打造自己的LINQ Provider(上):Expression Tree揭秘

概述 在.NET Framework 3.5中提供了LINQ 支持后&#xff0c;LINQ就以其强大而优雅的编程方式赢得了开发人员的喜爱&#xff0c;而各种LINQ Provider更是满天飞&#xff0c;如LINQ to NHibernate、LINQ to Google等&#xff0c;大有“一切皆LINQ”的趋势。LINQ本身也提供了很好的…

2017.9.15 postgresql批量插入造成冲突后执行更新

参考来自&#xff1a;https://stackoverflow.com/questions/40647600/postgresql-multi-value-upserts/46233907#46233907 1.before insert 2.insert sql 3.after insert 注意这里有两个容易出错的点&#xff1a;1.如果label字段不是必填的&#xff0c;要注意语法会不会出错。万…

所有程序员都应该遵守的11条规则

我是一个倾向于生活在规则下的人。 现在&#xff0c;这些规则大部分是我本人为自己设立的&#xff0c;但它们依然是规则。 我发现为自己创建规则可以让我过得更好&#xff0c;因为这样做可以提前决定一些事情&#xff0c;而不是要在匆忙中做出所有的决定。 我今天早上应该去健身…

mybatis动态SQL语句

三、动态SQL语句 有些时候&#xff0c;sql语句where条件中&#xff0c;需要一些安全判断&#xff0c;例如按性别检索&#xff0c;如果传入的参数是空的&#xff0c;此时查询出的结果很可能是空的&#xff0c;也许我们需要参数为空时&#xff0c;是查出全部的信息。这是我们可以…

git 脚本

echo $PWD message$1 content. if [ ! -n "$1" ] ;thenmessagedatemessage$message 推送到服务器echo $message elseecho "$1" figit add . git commit -m "$message " git push 转载于:https://www.cnblogs.com/whm-blog/p/7527271.html