当前位置: 首页 > news >正文

使用SQLite

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

与许多其他数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是一种嵌入式数据库,它的数据库就是一个文件。SQLite将整个数据库,包括定义、表、索引以及数据本身,作为一个单独的、可跨平台使用的文件存储在主机中。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中。Python就内置了SQLite3,所以在Python中使用SQLite,不需要安装任何模块,直接使用。

1  创建数据库文件

由于Python中已经内置了SQLite3,所以可以直接使用import语句导入SQLite3模块。Python操作数据库的通用的流程如图1所示。

图1  操作数据库流程

图标 (35)

  实例01  创建SQLite数据库文件

创建一个mrsoft.db的数据库文件,然后执行SQL语句创建一个user(用户表),user表包含id和name两个字段。具体代码如下:

import sqlite3

# 连接到SQLite数据库

# 数据库文件是mrsoft.db,如果文件不存在,会自动在当前目录创建

conn = sqlite3.connect('mrsoft.db')

# 创建一个Cursor

cursor = conn.cursor()

# 执行一条SQL语句,创建user表                   

cursor.execute('create  table  user (id int(10)  primary key, name varchar(20))')

# 关闭游标

cursor.close()

# 关闭Connection

conn.close()

上述代码中,使用sqlite3.connect()方法连接SQLite数据库文件mrsoft.db,由于mrsoft.db文件并不存在,所以会在本实例Python代码同级目录下创建mrsoft.db文件,该文件包含了user表的相关信息。mrsoft.db文件所在目录如图2所示。

图2  mrsoft.db文件所在目录

说明:再次运行实例01时,会提示错误信息:sqlite3.OperationalError:table user alread exists,这是因为user表已经存在。

2  操作SQLite

(1)新增用户数据信息

为了向数据表中新增数据,可以使用如下SQL语句:

insert into 表名(字段名1,字段名2,…,字段名n)  values (字段值1,字段值2,…,字段值n)

在user表中,有2个字段,字段名分别为id和name。而字段值需要根据字段的数据类型来赋值,如id是一个长度为10的整型,name是长度为20的字符串型数据。向user表中插入3条用户信息记录,则SQL语句如下:

cursor.execute('insert into user (id, name) values ("1", "MRSOFT")')

cursor.execute('insert into user (id, name) values ("2", "Andy")')

cursor.execute('insert into user (id, name) values ("3", "明日科技小助手")')

下面通过一个实例介绍向SQLite数据库中插入数据的流程。

图标 (35)

  实例02  新增用户数据信息

由于在实例01中已经创建了user表,所以本实例可以直接操作user表,向user表中插入3条用户信息。此外,由于是新增数据,需要使用commit()方法提交事务。因为对于增加、修改和删除操作,使用commit()方法提交事务后,如果相应操作失败,可以使用rollback()方法回滚到操作之前的状态。新增用户数据信息具体代码如下:

import sqlite3

# 连接到SQLite数据库

# 数据库文件是mrsoft.db

# 如果文件不存在,会自动在当前目录创建

conn = sqlite3.connect('mrsoft.db')

# 创建一个Cursor

cursor = conn.cursor()

# 执行一条SQL语句,插入一条记录

cursor.execute('insert into user (id, name) values ("1", "MRSOFT")')

cursor.execute('insert into user (id, name) values ("2", "Andy")')

cursor.execute('insert into user (id, name) values ("3", "明日科技小助手")')

# 关闭游标

cursor.close()

# 提交事务

conn.commit()

# 关闭Connection

conn.close()

运行该实例,会向user表中插入3条记录。为验证程序是否正常运行,可以再次运行,如果提示如下信息,说明插入成功(因为user表中已经保存了上一次插入的记录,所以再次插入会报错)。

sqlite3.IntegrityError: UNIQUE constraint failed: user.id

(2)查看用户数据信息

查找user表中的数据可以使用如下SQL语句:

select  字段名1,字段名2,字段名3,… from 表名  where 查询条件

查看用户信息的代码与插入数据信息大致相同,不同点在于使用的SQL语句不同。此外,查询数据时通常使用如下3种方式:

l  fetchone():获取查询结果集中的下一条记录。

l  fetchmany(size):获取指定数量的记录。

l  fetchall():获取结果集的所有记录。

下面通过一个实例来学习这3种查询方式的区别。

图标 (35)

  实例03  使用3种方式查询用户数据信息

分别使用fetchone、fetchmany和fetchall这3种方式查询用户信息,具体代码如下:

import sqlite3

# 连接到SQLite数据库,数据库文件是mrsoft.db

conn = sqlite3.connect('mrsoft.db')

# 创建一个Cursor

cursor = conn.cursor()

# 执行查询语句

cursor.execute('select * from user')

# 获取查询结果

result1 = cursor.fetchone()

print(result1)

# 关闭游标

cursor.close()

# 关闭Connection

conn.close()

使用fetchone()方法返回的result1为一个元组,执行结果如下:

(1,'MRSOFT')

(1)修改实例03代码,将获取查询结果的语句块代码修改为:

result2 = cursor.fetchmany(2)     # 使用fetchmany方法查询多条数据

print(result2)

使用fetchmany()方法传递一个参数,其值为2,默认为1。返回的result2为一个列表,列表中包含2个元组,运行结果如下:

[(1,'MRSOFT'),(2,'Andy')]

(2)修改实例03代码,将获取查询结果的语句块代码修改为:

result3 = cursor.fetchall()         # 使用fetchmany方法查询多条数据

print(result3)

使用fetchall()方法返回的result3为一个列表,列表中包含所有user表中数据组成的元组,运行结果如下:

 [(1,'MRSOFT'),(2,'Andy'),(3,'明日科技小助手')]

(3)修改实例03代码,将获取查询结果的语句块代码修改为:

cursor.execute('select * from user where id > ?',(1,))

result3 = cursor.fetchall()

print(result3)

在select查询语句中,使用问号作为占位符代替具体的数值,然后使用一个元组来替换问号(注意,不要忽略元组中最后的逗号)。上述查询语句等价于:

cursor.execute('select * from user where id > 1')

执行结果如下:

[(2,'Andy'),(3,'明日科技小助手')]

说明:使用占位符的方式可以避免SQL注入的风险,推荐使用这种方式。

(3)修改用户数据信息

修改user表中的数据可以使用如下SQL语句:

update  表名  set 字段名 = 字段值  where 查询条件

下面通过一个实例来学习一下如何修改表中数据。

图标 (35)

  实例04  修改用户数据信息

将SQLite数据库中user表ID为1的数据name字段值“mrsoft”修改为“MR”,并使用fetchAll获取表中的所有数据。具体代码如下:

import sqlite3

# 连接到SQLite数据库,数据库文件是mrsoft.db

conn = sqlite3.connect('mrsoft.db')

# 创建一个Cursor:

cursor = conn.cursor()

cursor.execute('update user set name = ? where id = ?',('MR',1))

cursor.execute('select * from user')

result = cursor.fetchall()

print(result)

# 关闭游标

cursor.close()

# 提交事务

conn.commit()

# 关闭Connection:

conn.close()

执行结果如下:

[(1, 'MR'), (2, 'Andy'), (3, '明日科技小助手')]

(4)删除用户数据信息

删除user表中的数据可以使用如下SQL语句:

delete  from 表名  where 查询条件

下面通过一个实例来学习如何删除表中数据。

图标 (35)

  实例05  删除用户数据信息

将SQLite数据库中user表ID为1的数据删除,并使用fetchAll获取表中的所有数据,查看删除后的结果。具体代码如下:

import sqlite3

# 连接到SQLite数据库,数据库文件是mrsoft.db

conn = sqlite3.connect('mrsoft.db')

# 创建一个Cursor:

cursor = conn.cursor()

cursor.execute('delete from user where id = ?',(1,))

cursor.execute('select * from user')

result = cursor.fetchall()

print(result)

# 关闭游标

cursor.close()

# 提交事务

conn.commit()

# 关闭Connection:

conn.close()

执行上述代码后,user表中ID为1的数据将被删除。运行结果如下:

 [(2, 'Andy'), (3, '明日科技小助手')]

相关文章:

  • 从面试角度了解前端基础知识体系
  • JavaFX HTMLEditor
  • 双色球预测算法(Java),——森林机器学习、时间序列
  • 华润的超市卡有什么用?
  • 发力采销,京东的“用户关系学”
  • 【SQL server速成之路】函数
  • 2406c++,iguana动态反射
  • 【SCAU数据挖掘】数据挖掘期末总复习题库判断题及解析
  • C++之结构体初始化使用总结
  • 边缘微型AI的宿主?—— RISC-V芯片
  • 【教师资格证考试综合素质——法律专项】教师法笔记以及练习题
  • 『大模型笔记』斯坦福大学教授李飞飞在2024年数据与人工智能峰会上的人工智能历史与未来
  • 如何在小程序中实现页面之间的返回
  • [Qt] Qt Creator 编码警告:warning:C4819
  • 彻底卸载SQL Server,步骤
  • php的引用
  • 《Java编程思想》读书笔记-对象导论
  • ECMAScript6(0):ES6简明参考手册
  • Flex布局到底解决了什么问题
  • iOS小技巧之UIImagePickerController实现头像选择
  • MySQL的数据类型
  • Terraform入门 - 1. 安装Terraform
  • 构建二叉树进行数值数组的去重及优化
  • 猴子数据域名防封接口降低小说被封的风险
  • 前端存储 - localStorage
  • 微信开放平台全网发布【失败】的几点排查方法
  • 写代码的正确姿势
  • 湖北分布式智能数据采集方法有哪些?
  • $.ajax中的eval及dataType
  • (03)光刻——半导体电路的绘制
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (笔记自用)LeetCode:快乐数
  • (二)构建dubbo分布式平台-平台功能导图
  • (力扣题库)跳跃游戏II(c++)
  • (推荐)叮当——中文语音对话机器人
  • (一)appium-desktop定位元素原理
  • .DFS.
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .Net FrameWork总结
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 反射的使用
  • .NET 服务 ServiceController
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 依赖注入和配置系统
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @PreAuthorize与@Secured注解的区别是什么?
  • @property python知乎_Python3基础之:property
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [C#]调用本地摄像头录制视频并保存