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

举报
梦想橡皮擦 发表于 2021/07/22 09:34:17 2021/07/22
【摘要】 如果你有想要交流的想法、技术,欢迎在评论区留言。本篇文章将给大家介绍 Python 如何操作 SQLite 数据库,本文将是滚雪球学 Python 第一阶段的倒数第二篇文章。缓解一下视疲劳 十四、Python 操作 SQLite 数据库 14.1 认识 SQLite 数据库SQLite 数据库在安装 Python 之后会自动安装到你的电脑上,通过它可以将数据持久的存储在本地电脑中,有人...

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

本篇文章将给大家介绍 Python 如何操作 SQLite 数据库,本文将是滚雪球学 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()
# 表中插入数据的SQL
insert_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()
# 查询语句 SQL
select_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,语法格式如下:

updateset 列名 = 新值,列名=新值...
where 条件

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

import sqlite3

# 连接到 my_data.db 数据库
conn = sqlite3.connect("my_data.db")

# 建立 cursor 对象
cursor = conn.cursor()
# 修改语句 SQL
update_sql = """
update students set name = "大橡皮擦" ,age=20
where 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 语法,很容易两个都学起来迷糊,不过不要担心,毕竟这只是第一遍滚雪球,相信第二次再来你会更加有自信的。

博主 ID:梦想橡皮擦,希望大家点赞评论收藏

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。