本篇适合刚入门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)”打上钩。

图:MariaDB 安装过程中需要注意的点
安装完成后就可以直接在本机使用MariaDB数据库啦。
我们还是尽量往简单里写,这里直接使用root用户操作
(不推荐直接使用root用户操作数据!这样不安全!)
(不推荐直接使用root用户操作数据!这样不安全!)
(不推荐直接使用root用户操作数据!这样不安全!)
(重要的事情说三遍!)
后面实际应用时,可以再深入了解一下数据库用户与权限这部分,
给每个项目至少建立一个有限权限的用户,严格控制权限,
以及项目之间除非必要,一般都要进行数据隔离。
情景1里面提到**『容易迁移』**,真的是这样的吗?
确实可以!因为几乎所有的Python连接关系型数据库的模块,
都是根据Python定的一个叫**“DB-API 2.0”的接口标准**来写的,
(官方文档传送门:https://www.python.org/dev/peps/pep-0249/ )
最大的好处就是,非常方便地,
我们不需要怎么改动代码就可以适用连接更多的数据库。

图:将先前存入sqlite数据库的数据,边读出边写入到MariaDB数据库中
演示的代码可以看出,两种数据库调用的方法函数什么的基本都一样,
可以从sqlite的代码一比一复制过去,再根据 pymysql模块的文档
(传送门:https://pymysql.readthedocs.io/en/latest/ )
以及MariaDB的参考资料
(网络资料传送门:https://www.w3cschool.cn/mariadb/ )
稍微改一改代码,就可以用上了,还是so easy,是不?
同样问题,写进数据库后,怎样最直观地看到刚写入的数据内容呢?
依然是“游标”,select查询一下数据内容,
或者使用非常经典的Navicat,进行图形界面操作,
它也支持连接多款数据库软件,功能也相当强大的说。

图:在 Navicat 中查看刚写入的数据
至此,MariaDB数据库,以及怎样操作数据迁移,
都已经基本入门了吧~
最后提一下拓展方向,
大伙儿可以在评论区留言说说哪些是感兴趣的,
以后会专门写图文来讲哈:
· 数据库ORM工具,如 SQLAlchemy:ORM是“把关系数据库的表结构映射到对象上”的意思,操作那些对象就等同于操作数据本身,它其实是在各种数据库连接驱动之上再做了一层封装,下层换数据库时上层代码基本不用做太大的改动,它都能自如应付,具体可以参考廖老师博客的文章(网络资料传送门:https://www.liaoxuefeng.com/wiki/897692888725344/955081460091040 )
· 非关系型数据库,如 MongoDB:储存数据的结构叫BSON,是一种类似JSON的结构,应用情景比如,经常爬取JSON结构的数据,用它来存取数据会方便很多,具体可以参考网络上的教程(网络资料传送门:https://www.runoob.com/mongodb/mongodb-tutorial.html )
· 复杂的SQL操作,是需要经验积累的,如果先前没怎么接触数据库,可以先从最简单的操作开始试验(网络资料传送门:https://www.runoob.com/sql/sql-tutorial.html ),然后找题库平台(比如力扣的,传送门:https://leetcode-cn.com/problemset/database/ )上数据库专题的题目多实操一下,很快就可以积累起来的
最后的最后,附上本篇实操练习的GitHub repo:
https://github.com/djun/db_exercise

以上,希望对你有所帮助~



以上就是“我的实战经验分享:深入浅出Python数据库操作”的全部内容,希望对你有所帮助。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、Python必备开发工具

三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、Python练习题
检查学习结果。

六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至优快云官方,朋友如果需要可以直接微信扫描下方优快云官方认证二维码免费领取【保证100%免费】。

本文指导Python初学者如何使用SQLite存储数据,包括基本操作和性能分析。随后介绍如何迁移数据到更强大的MariaDB数据库,强调代码的迁移性和数据库操作的简化。同时涉及ORM工具和非关系型数据库的简介。
7861

被折叠的 条评论
为什么被折叠?



