写点什么

14. Python 与数据库那点事儿,滚雪球学 Python

发布于: 2021 年 02 月 18 日
14. Python 与数据库那点事儿,滚雪球学 Python

今天是持续写作的第 <font color="red">14</font> / 100 天。

如果你有想要交流的想法、技术,欢迎在评论区留言。


本篇文章将给大家介绍 Python 如何操作 SQLite 数据库,本文将是滚雪球学 Python 第一阶段的倒数第二篇文章。



<center><font color=red>缓解一下视疲劳</font></center>


已完成的文章


  • 1.这才是 Python 学习的正确起手姿势,滚雪球学 Python

  • 2. 无门槛学会数据类型与输入、输出函数,滚雪球学 Python

  • 3. 无转折不编程,滚雪球学 Python

  • 4. 列表一学完,Python 会一半,滚雪球学 Python

  • 5. Python 循环的本质就是一段代码懒得重复写

  • 6. Python 元组,不可变的列表,滚雪球学 Python

  • 7. ✎ 会查新华字典不?会。Python 字典已经掌握了

  • 8. ㊙ Python 集合三板斧,滚雪球学 Python

  • 9. Python 学习过程的第一个山坡,99%的人都倒在了山坡下

  • 10. 比找女朋友还难的技术点,Python 面向对象

  • 11. 用别人写好的代码,完成我的工作,剩下的时间去摸鱼

  • 12. 数据放在本地,心里才更踏实,滚雪球学 Python

  • 13. 如果自己写的 Python 程序出错了,怎么办?


**本系列文章将在 2021 年春节前完成,欢迎关注,点赞,评论 --- 梦想橡皮擦**


**想学 Python 爬虫,可以订阅橡皮擦专栏哦~** 🈲🈲🈲 点击发现惊喜 🈲🈲🈲


十四、Python 操作 SQLite 数据库


14.1 认识 SQLite 数据库


SQLite 数据库在安装 Python 之后会自动安装到你的电脑上,通过它可以将数据持久的存储在本地电脑中,有人肯定说了,我们可以将数据存储到文件中啊,为啥要存储到数据库中呢?这个吧,肯定是用着舒服啊(说了跟没说一样)。说真的很多时候不用问为什么的,先上手,后面在补充这些概念类的东西,用数据库在某些场景下是比用文件好的,当然只是在某些场景。


在 Python 中通过 import sqlite3 导入模块。


14.1.1 SQLite 基本使用


数据库一般分为以下三步。


  1. 连接数据库

  2. 操作数据库

  3. 关闭数据库


使用如下命令可以连接数据库。


conn = sqlite3.connect("数据库名称")
复制代码


该方式如果数据库存在,自动建立连接,如果不存在,先创建数据库再建立连接关系。使用完毕记得及时关闭数据库。


conn.close()
复制代码


上述代码中的 conn 就是一个普通的变量,一般叫做数据库连接对象,记住也是一个对象,它肯定有属性,也有方法。


请运行下述代码,在本地目录查看是否多出了一个文件。


import sqlite3
conn = sqlite3.connect("my_data.db")
conn.close()
复制代码


14.1.2 建立 SQLite 数据库表


通过 connect 方法可以与数据库文件建立连接,返回的对象是 connect 对象,这个对象常用的方法如下。


  • close 关闭数据库连接;

  • commit 更新数据库内容;

  • cursor 建立 cursor 对象,该对象可以执行 execute 方法;

  • execute 执行 SQL 数据库命令,例如数据表建立,查询,删除,更新。


SQLite 数据类型

在正式学习 SQLite 数据库操作之前,需要先学习一下该数据库中包含的几种数据类型,因为 SQLite 比较简单,所以涉及的数据类型内容也不多。


  • NULL 空值;

  • INTEGER 整数;

  • REAL 浮点数;

  • TEXT 字符串;

  • BLOB 富文本数据,例如图片、歌曲。


有了上述内容之后就可以开始操作数据库了。在这之前还要补充一个概念,一个数据库可以包含多张表,翻译成通俗的话就是,一个 my_data.db 文件中可以包含多个表。


my_data.db 文件中建立第一张表。


import sqlite3
# 连接到 my_data.db 数据库conn = sqlite3.connect("my_data.db")
# 建立 cursor 对象cursor = conn.cursor()# 建表 SQL 语句sql = """create table students(id int,name text,sex text,age int)"""# 执行 sql 语句cursor.execute(sql)# 关闭 cursor 对象cursor.close()# 关闭数据库连接conn.close()
复制代码


相关注释已经添加到代码中,注意 conn 对象与 cursor 对象,使用之后都需要关闭,并且 cursor 对象在 conn 对象之前关闭。


create table students(id int,name text,sex text,age int)
复制代码


该内容是一个建表 SQL 语句,其中 create table 表名称(字段列表),每个字段定义都是按照 字段名 字段类型 格式设计的。通过该 SQL 语句就可以在数据库中建立一个 students 表,表中包含 4 列内容,分别是 idnamesexage。这里你可以将表看成一个类似表格的东西。

|id |name |sex| age |

|--|--|--|--|


已经创建 students 表之后,就不可以在创建相同表名的表了。也就是在执行上述代码会报错,这时你就可以用到 try ... except 语句了。


import sqlite3
# 连接到 my_data.db 数据库conn = sqlite3.connect("my_data.db")
# 建立 cursor 对象cursor = conn.cursor()# 建表 SQL 语句sql = """create table students(id int,name text,sex text,age int)"""try: # 执行 sql 语句 cursor.execute(sql)except: print("数据库已经存在该表")# 关闭 cursor 对象cursor.close()# 关闭数据库连接conn.close()
复制代码


14.1.3 表中增加数据


在数据库中建立表之后就可以增加数据了,表中的数据一般称为记录,接下来使用插入数据的命令向表中增加一条学生数据。


import sqlite3
# 连接到 my_data.db 数据库conn = sqlite3.connect("my_data.db")
# 建立 cursor 对象cursor = conn.cursor()# 表中插入数据的SQLinsert_sql = """insert into students values(?,?,?,?)"""try: # 待插入的数据 data = (1,"橡皮擦","女",18) # 执行 sql 语句 cursor.execute(insert_sql,data) # 更新数据库内容,在插入数据、删除数据、更新数据的时候不要忘记该命令 conn.commit()except Exception as e: print("插入异常",e)# 关闭 cursor 对象cursor.close()# 关闭数据库连接conn.close()
复制代码


上述代码最核心的为 insert into students values(?,?,?,?) ,该内容也是 SQL 语句,执行该语句使用 execute 方法时,需要在该方法的第二个参数位置传入对应的数据,也就是说如果 SQL 语句中有三个问号,这里的第二个参数也应该是三个元素的元组。


14.1.4 查询数据库中的表数据


查询语句的 SQL 格式为:


select * from 表名
复制代码


查询 students 表中的数据代码如下:


import sqlite3
# 连接到 my_data.db 数据库conn = sqlite3.connect("my_data.db")
# 建立 cursor 对象cursor = conn.cursor()# 查询语句 SQLselect_sql = """select * from students"""try:
# 执行 sql 语句 results = cursor.execute(select_sql) print(results) for record in results: print(record)except Exception as e: print("查询异常", e)# 关闭 cursor 对象cursor.close()# 关闭数据库连接conn.close()
复制代码


使用上述代码即可将数据库中指定表的数据全部读取出来。还有当我们执行 results = cursor.execute(select_sql) 之后,输出的 results 对象类型为 <sqlite3.Cursor object at 0x00000000020DCB90>,该对象存在一个 fetchall 方法,使用该方法可以一次性将所有数据都存放到一个元组内。


还有一个需要说明,如果只想要某个数据表中的某一列,不想要全部数据,使用的 SQL 语句语法格式为:


select 列名,列名 from 表名
复制代码


14.1.5 更新表数据


更新数据表中的数据用到的关键词是 update,语法格式如下:


update 表 set 列名 = 新值,列名=新值...where 条件
复制代码


这里的 SQL 语法格式变的相对复杂了一些,主要增加了 where 条件判断,先完成以下代码内容。


import sqlite3
# 连接到 my_data.db 数据库conn = sqlite3.connect("my_data.db")
# 建立 cursor 对象cursor = conn.cursor()# 修改语句 SQLupdate_sql = """update students set name = "大橡皮擦" ,age=20where id = 1"""try:
# 执行 sql 语句 cursor.execute(update_sql) conn.commit()except Exception as e: print("更新异常", e)# 关闭 cursor 对象cursor.close()# 关闭数据库连接conn.close()
复制代码


执行更新操作,将 橡皮擦 更新为了 大橡皮擦,可以使用查询语句查看一下表中的数据是否得到修改。


Python 操作数据库重点其实是 SQL 语句的熟练程度,本篇博客中涉及的 SQL 语句只是冰山一角,对于 SQL 语句其实是存在专业的语法结构的,在后续再次滚雪球的时候,将为你展开说明。


在更新表中列数据的时候,第一个要注意一定要增加 where 条件,否则话整个表就都被更新了;第二个一定要确定好列名,否则找不到列名也会报错的哦。


14.1.6 删除表数据


学习了插入与更新之后,删除表数据就变得简单多了,记住 SQL 的语法格式就可以:


delete from 表名where 条件
复制代码


当 where 条件满足的时候,就会删除对应的数据,一定要注意如果没有写 where 条件,整个表就被删除了。


**如果你不想**删库跑路**,那记住一点,当对数据库中任意表执行更新或者删除操作的时候,一定都要写上 where 条件**


14.2 这篇博客的总结


本篇博客如果是第一次学习 Python 的朋友打开,其实难度很大,因为里面涉及了另一个语言体系叫做 SQL 语言,一种对数据库进行操作的语法,学习该语法之后其实对很多数据库都可以进行简单的操作了,尴尬的是如果你第一次学习,你需要一边看 Python 语法,一边看 SQL 语法,很容易两个都学起来迷糊,不过不要担心,毕竟这只是第一遍滚雪球,相信第二次再来你会更加有自信的。


**想学 Python 爬虫,可以订阅橡皮擦专栏哦~** 🈲🈲🈲🈲 点击发现惊喜 🈲🈲🈲🈲


🈚🈚🈚🈚🈚




如果你想跟博主建立亲密关系,可以关注同名公众号 <font color="red">梦想橡皮擦</font>,近距离接触一个逗趣的互联网高级网虫。

博主 ID:梦想橡皮擦,希望大家<font color="red">点赞</font>、<font color="red">评论</font>、<font color="red">收藏</font>。


发布于: 2021 年 02 月 18 日阅读数: 13
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
14. Python 与数据库那点事儿,滚雪球学 Python