Python批量操作文件写入数据库及从数据库取数据!

写在前面

博主工作长期需使用到数据库查询数据,因而接触到了数据库的一些皮毛知识。但是数据库和办公 不能互通,远端访问也没法实现,所以长期以来查询数据都相当麻烦。近期博主在自己的工作电脑上搭建了一个的MySQL数据库,并尝试导入一些数据进去,顺便自己查询,其中遇到了各种各样的问题,才深刻领悟到后端操作的艰难,写篇博客记录一下其中的艰难过程。

  • 编译环境:Python3.7
  • 编译器:pycharm
  • 数据库可视化软件:Navicat premium 15
  • 数据库:MySQL 8.0.20

注:以下内容,仅供用于学习交流,而且博主也对相关内容进行的打码处理,文件名和数据库名都是用的XXX来表示的。

数据库搭建

博主的数据库是用的MySQL,用的是CMD命令行方式安装和配置的, 上有很多教程,但是良莠不齐,有空了我专门写一篇博客记录安装过程,这边博客就不说了。不过在安装时,一定要牢记系统给你默认设置的连接密码,如果没记住的话,会让你崩溃, 上教程一堆,能实际解决问题的没两个,这个密码是关键,切记、切记。

数据库可视化软件

博主用的是Navicat premium 15,界面如下:

为什么需要这个软件呢,这个软件可以让你方便的连接你的数据库,也可以在里面写一些查询语句,甚至可以将数据导入到数据库,而且还支持批量导入,总之,非常方便,可以理解为数据库的前端操作软件。但实际使用过程却没有那么友好,比如我导入数据到我的数据库时,经常出现下面的问题:

finished with error
也不告诉你那里出了错,反正就是数据不全,大概只导入了1/4的数据。当然也不是所有的数据导入都会出现这个问题,但是确实头疼,博主 上搜了一堆教程没一个能解释明白的,所以才有了后面用Python导入数据库的尝试。不过用Navicat写查询语句确实方便,你的数据库需要这么个数据库可视化软件,不然你操作数据库,就永远像个黑客一样在CMD里写命令行来操作了。

批量合并数据文件

博主这边有很多txt文件,但都是同一批字段的数据,至于为什么会这样,博主也懒得解释。反正现在的工作是,把这些txt文件合并到一个文件里去,这样导入数据库也方便点不是吗br> 当然你也可以自己在excel里面一个个的复制粘贴,但是感觉一是工作量太大,十来个文件还好,几百个文件你要这么操作,能让人抓狂,而且逼格也太低了,现在流行自动化办公。
直接上代码:

来解释一下代码
filedir = r’C:xxxxxx’ 我把所有的文件放在这个文件夹里,注意是一个绝对的路径
filenames=os.listdir(filedir) 获取这个文件夹里面所有的文件列表

这里几行代码呢,目的是创建一个空的dataframe,这个空的dataframe的列就是上面那个文件夹里面某个文件的列名
后面就是写循环,往列表里面添加数据,然后将列表转换为excel文件了。

博主注释起来的这块代码,是写入txt的方式,看需求,当然,这里f没定义,可以在循环外面定义一下f,比如:

将数据写入数据库

直接上代码了再解释吧

真的挺复杂,也不知道博主能不能讲明白,我挑一些自己认为比较晦涩的代码来解释吧

基础数据导入

这里主要是把文件的列名变成一串字符串,join函数可以将列表转化为字符串,分割符 是’,’这个逗

把上面合并的那个excel文件读进来,并且获取这个excel的sheet名,从上面批量合并数据文件这一步来看,博主其实只有一个sheet。

链接数据库

这行代码非常关键,关系到你能否把数据写到数据库里去,connect函数就是用来链接数据库的,里面的参数我来解释一下:

  • host:主机名,如果是访问本机数据库的话,一般是localhost,如果是访问 络数据库的话,就要写服务器的 络地址了
  • user:用户名,你数据库的用户名,这里就与自己当初搭建的数据库密切相关了
  • passwd:这个数据库用户名对应的密码,就是我前面提到的那个密码,很重要、很重要、很重要
  • db:你要讲数据写入的数据库名称
  • charset:这玩意儿很坑,字符格式,主要看你的数据库是什么样的,我的是utf-8,所以这里我写上了,但很多教程并没有这个,所以经常 错,没写上之前,我也是各种 错

数据处理

这段代码的目的是将表中所有的数据全部取出来,并写入到data_list这个列表中
type_rt = sheet.cell(r,t).ctype用于获取每个字符的类型

ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

我将所有数字型的数据全部转换为字符串,便于完整的写入数据,至于到哪里去把字符串修改回来,这个可以到Navicat里面去设置。当然,这不是最佳的数据处理方式,只是比较适合博主的数据而已

写入数据库

变量val用来生成一串’%s’这个玩意儿,val[:-1]用切片切掉最后一个逗 ,其实这里有更简单的写法,像前面一样用join函数

这里的ss和val[:-1]是等价的。
executemany是批量写入函数,“insert into xxx (%s) values(” %(cols) + val[:-1] + “)”中的xxx是数据表。还有另外一种写法,不用批量导入,而是用execute函数,每读一行,就写一行,写在循环里面,但是当时老是 错,我就没继续下去了。
后面就是常规的数据库操作了
当然,整个过程不断的 错,比如 错说我的字符串长度太长了,等等,要在数据库里面修改一些参数,可能每个人遇到的问题不一样,遇到了就去 上搜索教程,基本都能解决。
至此完成了数据的写入,接下来看看怎么在Python里查询数据

Python操作数据库查询数据

还是先上代码

第一步,链接数据库并登陆
第二步,写查询语句,select from where基本查询语法
第三步,执行查询语句
顺利出结果
相对来说,要简单的多

写在后面

从博主决定搭建数据库到最后打通数据库,总体来说,感觉很费劲,也走了很多弯路,给我的感觉就是后端的东西要比前端复杂一点,当然,博主水平有限,也就目前的认知水平这样,前端的东西其实也很复杂,只是我个人接触的相对多一点而已。
不过还是很开心的,毕竟又get了个新技能。

 

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树基本技能数据库操作208102 人正在系统学习中 Python源码

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年8月4日
下一篇 2020年8月4日

相关推荐