本篇适合刚入门Python、已经学习了一些基础,想要关联学习数据库相关操作的朋友们~
先前听到一些朋友的反馈说,Python语言本身是很轻松地入门了,
但在做数据储存的时候,
比如做爬虫爬取到的数据,想要把暂时保存在内存中的数据永久保存起来,
究竟往哪存,怎么存,就有些困惑了。
“with open()”存到本地文件是相对简单的处理,
爬取到的数据大多是结构化的,直接存取文件可能不是效率最高的方法,
但面对数据库,了解到使用数据库的优点之后,
总会感觉与数据库之间似乎还隔了一层神秘面纱,有些难入门。
其实细说下来,也不过如此,本篇会循序递进跟大伙儿聊聊实战经验,
练习实际操作,然后发出“so easy!”的感叹~
看过我图文的朋友大概会了解,是比较倾向于“授之以渔”的,
本篇也一样,除了说说关键点外,
会给很多资料传送门,明确方向方便大伙儿深入了解。
咱话不多说,直接进入主题吧!
在实操之前,我们稍微先提一下环境配置什么的。
这里建议大伙儿测试的时候搭配使用Anaconda 3
(之前发的图文《 安装环境配置,以及如何编译exe可执行程序(上篇) - Python高手成长路(系列)(第1阶段) 》可以参考),
使用里面自带的一款非常方便学习测试的IDE,叫 Jupyter Notebook(以下简称Notebook)。
图:Jupyter Notebook 的Logo
我能想到的用Jupyter Notebook练习的好处:
· 可以交互式操作,输入一段运行立即能得到运行结果,也能一直保留运行时的内存数据
· 同个笔记文件中,每段代码的运行结果都可以随时保存起来,下次再打开时也可以查看结果内容
· 对比官方原版搭配的IDLE,它界面流畅,而且操作上方便太多,而且还有能写Markdown、显示图表图像等等的加分功能
· 除了默认支持的Python外,还支持R、Julia、Scala等40多款程序语言(支持列表传送门:https://github.com/jupyter/jupyter/wiki/Jupyter-kernels )
但Jupyter Notebook它也是有缺点的:
· 运行起来可能不是特别快速,虽然做机器学习研究等等一些情景下用它会很方便,但由于软件是前后端分离的形式,后端回传结果到前端网页的过程有一定的性能损失
· 不太适合用做生产用途,对比另一款IDE,PyCharm,项目开发更适合使用后者这款
这里我们尽可能地减少安装环境配置等等的影响,
不同系统上具体操作的差别不会太大。
这里假定使用的是Win10,官网下载安装完成后,
在开始菜单找到Notebook并点开它。
默认配置下,点开后会出现一个黑底白字的控制台窗口,
然后自动调出系统默认浏览器弹出Notebook的主界面窗口。
图:Jupyter Notebook的网页界面和控制台界面
Notebook黑底白字的控制台窗口,在用的过程中千万不能关闭它,
最小化它即可,不必太多理会。
网络上有非常多的Notebook基本操作的指引
(网络资料传送门:https://zhuanlan.zhihu.com/p/33105153 )
这里不再赘述啦。
上图是我新建了一个文件夹,在里面新建了一个ipynb文件(统一称为Notebook文件)。
OK!实验环境准备就绪,可以继续下一步啦。
01
情景1:爬虫爬取了一些数据,已经整理成清单,怎样存进数据库里面呢?这里演示时用了一些新闻数据。
根据我的演示内容,目前只抓取一个页面上的部分数据,
然后整理出了“分类,标题,点击数,链接”共4个字段。
图:演示用的部分代码和数据(完整代码数据见GitHub)
数据量确实也不太多的样子,如果用自带的 csv 模块写入到文件也不会太差。
写入标准格式的csv文件,代码不过五六行而已。
(csv模块官方文档传送门:https://docs.python.org/3/library/csv.html )
图:演示写入到csv文件
那么,
换成使用数据库会增加存取数据的操作成本吗?
会影响程序的运行效率,或者影响本机的性能吗?
答案或许是否定的。
Python自带了一个简单但非常有用的模块叫 sqlite3,
根据官方文档介绍(传送门:https://docs.python.org/3/library/sqlite3.html ),
它适合用于在本机上储存一些数据量不太大的内部数据,
而且对于Python来说,还有一点非常重要的优势是,
『容易迁移』,也就是说,后面改成用MySQL或者PostgreSQL都会很方便,
我们后面的情景会演示『容易迁移』这一点的。
在这种情景下,改成使用sqlite来存取数据有什么优势呢?
· 数据形式基本一致,都是二维的表格
· 存入csv文件的代码,可以很方便地改写成存入sqlite数据表的代码
· 对比csv文件,数据表的每一列可以指定数据类型,便于管理和使用
· 对比csv文件,利用SQL可以处理复杂数据,不需要一次性载入内存再做处理
· 对比csv文件,多了SQL语法语句的操作,支持模糊查询、索引加速等等
那怎么使用 sqlite3呢?
不同数据库还是有不少差别的,数据类型,SQL语法,等等。
因此首先需要查看相关资料了解一下sqlite本身的基本操作
(网络资料传送门:https://www.runoob.com/sqlite/sqlite-create-table.html )。
sqlite大概是最简单的关系型数据库了,
我们入手的时候尽量往简单里写,以后再深入了解把代码写得更强大。
了解完sqlite本身后,再了解一下在Python中的使用方式。
使用模式基本上离不开这3步:
· 连接数据库
· 操作数据
· 断开数据库
我们这里演示只演示把数据存入sqlite数据库文件的话,
也不外乎是这3步,只是其中多了一个叫“游标(Cursor)”的东东。
游标就像“指针”,增删改查都靠它!
先连接数据库,然后跟数据库申请一个游标对象,
再利用游标把数据依次写到数据库里面,so easy!
图:演示连接和写入到sqlite数据库
写进数据库后,怎样最直观地看到刚写入的数据内容呢?
除了可以再次利用刚才提到的游标,select查询一下数据内容,
也可以安装使用 SQLite Expert Personal 这款软件(个人免费使用),
图形界面操作,也可以在里面编写执行SQL对数据进行二次处理。
图:在 SQLite Expert Personal 中查看刚写入的数据
至此,sqlite已经基本入门了吧~
02
情景2:爬虫爬取的数据越来越多,sqlite数据库文件越滚越大,也满足不了一些更高级的使用需求了,可以快速地迁移到其他数据库上吗?“切换数据库”对IT运维人来说,有时确实是一个非常令人头大的问题,但对于我们个人使用来说,能否快速迁移,答案或许是肯定的,特别是数据规模还不太大的时候,而且!越早做迁移,痛苦越少~想象起来好像挺难的?其实并不难哦。我们先在目前主流的关系型数据库里面,挑选一款既简单又很强大的数据库软件来做试验,这里选的是跟MySQL同源的 MariaDB数据库,是开源的。(MariaDB官网: https://downloads.mariadb.org/mariadb/ )跟Anaconda 3类似,Win下有可以直接用的安装包, 安装MariaDB的过程中,别忘了设置好root用户的密码(root用户有最高权限),以及 别忘了给“用UTF-8作为服务器默认的字符集(Use UTF8 as default server's character set)”打上钩。以上,希望对你有所帮助~
我是DJun(小丁),码龄19年,从事IT工作6年,踩过无数“语言”坑最后入坑Python,想通过公众号,把自己的成长经历与经验分享给朋友们。
同名酷安看看号“好想学Python”已开通,欢迎订阅。
相关推荐>>> 解谜了!Python 装饰器的魔法
>>> “鸭子类型”,因吹丝挺!- Python & Go
>>> 那么,办公室萌新可以跟Python碰撞出怎样的火花?
>>> Python从哪里开始学好呢?
>>> 网络爬虫与网页自动化操作:最小化版系统学习的大纲