SQLite3进行数据库各项常用操作

目录

  • 前言
  • 1、SQLite介绍
  • 2、通过SQLite创建一个数据库文件
  • 3、往数据库文件中插入数据
  • 4、数据库文件信息查询
  • 5、修改数据库中的内容
  • 6、删除数据库中的内容

前言

本文是通过轻量化数据库管理工具SQLite进行的基础操作和一些功能实现。

1、SQLite介绍

SQLite是一个广泛使用的嵌入式SQL数据库引擎,以其高可靠性、全功能集、独立性、简单性、易配置和良好的文档而闻名。SQLite通常被用于那些不需要复杂服务器数据库系统的场合,比如移动应用、桌面应用以及只需要单用户访问数据库的场合。

SQLite的特点主要包含:

  • 轻量级数据库:SQLite是一个轻量级的数据库库,不是一个完整的数据库系统。它被设计为无需配置、无需服务器的嵌入式SQL数据库引擎。
  • 单一文件:SQLite数据库存储在一个单一的磁盘文件中,便于携带、复制和共享。
  • 本地存储:常用于设备或应用程序中嵌入式数据库存储需求,如手机应用程序、游戏、个人工具等。
  • 不需要独立的服务器过程:SQLite在应用程序进程中运行,不需要配置和管理数据库服务器。
  • 用途:适用于轻量级应用、原型开发、教育、小型应用程序等,以及需要简单数据存储但不需要高并发和高性能的场景。
    在这里插入图片描述

2、通过SQLite创建一个数据库文件

通过代码创建一个数据库文件,我们假设要创建的数据库文件是"mhdata.db"。

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

如果文件已经存在,则会报错提示:
sqlite3.OperationalError: table user already exists

代码显示如下:

import sqlite3
# 连接到SQLite数据库
conn = sqlite3.connect('mhdata.db')
# 创建一个Cursor:
cursor = conn.cursor()
# 执行一条SQL语句,创建user表:                    
cursor.execute('create table user (id int(10)  primary key, name varchar(20))')
# 关闭游标
cursor.close()
# 提交事务:
conn.commit()
# 关闭Connection:
conn.close()

在这里插入图片描述
我们通过Navicate Preminm打开就可以看到生成了一个名字为mhdata的表,且有两列,对应的标题分别为id和name,下面的内容为空(因为此时只创建了表和标题,自然是没有内容的)。

3、往数据库文件中插入数据

我们继续使用SQLite往刚才的mhdata.db文件中插入数据,代码如下:

import sqlite3# 如果文件不存在,会自动在当前目录创建:
conn = sqlite3.connect('mhdata.db')
# 创建一个Cursor:
cursor = conn.cursor()# 首先,创建一个名为user的表,如果表已存在,SQL语句不会有任何效果
cursor.execute('''CREATE TABLE IF NOT EXISTS user(id TEXT PRIMARY KEY, name TEXT)''')# 继续执行一条SQL语句,插入一条记录:
cursor.execute('insert into user (id, name) values ("1", "语文")')
cursor.execute('insert into user (id, name) values ("2", "数学")')
cursor.execute('insert into user (id, name) values ("3", "英语")')
cursor.execute('insert into user (id, name) values ("4", "物理")')
cursor.execute('insert into user (id, name) values ("5", "化学")')# 关闭游标
cursor.close()
# 提交事务:
conn.commit()
# 关闭Connection:
conn.close()

执行代码后,就在mhdata.db表格中插入了5条数据。
我们将mhdata.db表格中数据可视化展示如下:
在这里插入图片描述

注: 关于cursor.execute(‘’‘CREATE TABLE IF NOT EXISTS user (id TEXT PRIMARY KEY, name TEXT)’‘’)的含义解释:

  • CREATE TABLE IF NOT EXISTS: 这是SQL命令的一部分,用来创建一个新的表。IF NOT EXISTS是一个条件子句,它确保命令只在名为user的表不存在时执行。如果表已经存在,SQL操作将不会做任何事情,以此避免覆盖或报错。
  • user: 这是要创建的表的名称。
  • (id TEXT PRIMARY KEY, name TEXT): 这是定义表的结构的部分。在这个括号内,我们定义了表中的列及其数据类型:
  • id TEXT: 这指创建一个名为id的列,用来存储文本类型的数据。
  • PRIMARY KEY: 这个关键词指定id列是表的主键,意味着这个列的值必须唯一,不能重复。主键通常用来唯一地识别表中的每一行记录。
  • name TEXT: 这指创建另一个名为name的列,同样用来存储文本数据。
  • 综上,这条SQL语句的作用是确保在数据库中存在一个名为user的表,其中包含id(主键)和name这两个文本类型的列,从而后续的插入操作能够正常执行。

4、数据库文件信息查询

这里我们查询下刚才生成的mhdata.db文件,注意要让查询的mhdata.db文件和我们的.py在同一个目录下面,或者是指定查询目录。

可以执行查询的代码如下:

import sqlite3
# 连接到SQLite数据库,数据库文件是mhdata.db
# 可以在这里修改路径
conn = sqlite3.connect('mhdata.db')
# 创建一个Cursor:
cursor = conn.cursor()
# 执行查询语句:
cursor.execute('select * from user')
# 获取查询结果:
result1 = cursor.fetchall()
print(result1)# 关闭游标
cursor.close()
# 关闭Connection:
conn.close()

我们查看下执行后的结果:

[('1', '语文'), ('2', '数学'), ('3', '英语'), ('4', '物理'), ('5', '化学')]

我们结合上面第三节的显示可以看出两者的结果保持一致。

5、修改数据库中的内容

我们修改上面mhdata.db中的某一条数据内容,如将(“1”,“语文”)改成(“1”,“生物”),那么执行代码如下:

import sqlite3
# 连接到SQLite数据库,数据库文件是mhdata.db
conn = sqlite3.connect("mhdata.db")
# 创建一个Cursor:
cursor = conn.cursor()
cursor.execute('update user set name = ? where id = ?',('生物',1))
cursor.execute('select * from user')
result = cursor.fetchall()
print(result)
# 关闭游标
cursor.close()
# 提交事务
conn.commit()
# 关闭Connection:
conn.close()

执行后的结果展示为:

[('1', '生物'), ('2', '数学'), ('3', '英语'), ('4', '物理'), ('5', '化学')]

由此可见达到我们要修改其中某一条数据的目的,如果想一次修改多条数据,可以参照( 3、往数据库文件中插入数据),直接多次执行cursor.execute()语句即可。

6、删除数据库中的内容

经过刚才的修改操作,现在我们删除数据库文件中的(“1”,“生物”),执行代码如下:

import sqlite3
# 连接到SQLite数据库,数据库文件是 mhdata.db
conn = sqlite3.connect("mhdata.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()

执行后的结果展示:

[('2', '数学'), ('3', '英语'), ('4', '物理'), ('5', '化学')]

到这里,基本完成了用SQLite3进行数据库的基本操作,包含:数据库文件的建立,数据插入、数据查询、数据修改和数据删除的基本操作。

博主还将另外一个基于本篇博客的升级版发布如下:一个程序解决SQLite常见的各项操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/293626.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言内存函数(超详解)

乐观学习,乐观生活,才能不断前进啊!!! 我的主页:optimistic_chen 我的专栏:c语言 点击主页:optimistic_chen和专栏:c语言, 创作不易,大佬们点赞鼓…

SQL,group by分组后分别计算组内不同值的数量

SQL,group by分组后分别计算组内不同值的数量 如现有一张购物表shopping 先要求小明和小红分别买了多少笔和多少橡皮,形成以下格式 SELECT name,COUNT(*) FROM shopping GROUP BY name;SELECT name AS 姓名,SUM( CASE WHEN cargo 笔 THEN 1 ELSE 0 END)…

MyBatis 参数重复打印的bug

现象 最近有个需求,需要在mybatis对数据库进行写入操作的时候,根据条件对对象中的某个值进行置空,然后再进行写入,这样数据库中的值就会为空了。 根据网上查看的资料,选择在 StatementHandler 类执行 update 的时候进…

一文带您了解如何进行ADCDAC精度测试

作者介绍 一、前言 ADC(模数转换器)和DAC(数模转换器)是电子设备中至关重要的组件,它们负责将模拟信号转换为数字信号,或者将数字信号转换为模拟信号。这些转换器的存在形式主要有两种:一种是作…

c语言-static

static作用&#xff1a;修饰变量和函数 修饰局部变量-静态局部变量 static未修饰局部变量 #include <stdio.h>void print() {int a 0;a;printf("%d ", a); }int main() {int i 0;for (i 0; i < 10; i){print();}return 0; }运行结果 static修饰局部变…

vulnhub靶场之driftingblues-4

一.环境搭建 1.靶场描述 get flags difficulty: easy about vm: tested and exported from virtualbox. dhcp and nested vtx/amdv enabled. you can contact me by email for troubleshooting or questions. This works better with VirtualBox rather than VMware. 2.靶场…

[SpringCloud] Feign Client 的创建 (二) (五)

文章目录 1.自动配置FeignAutoConfiguration2.生成 Feign Client2.1 从Feign Client子容器获取组件2.2 Feign Client子容器的创建2.3 构建Feign Client实例 1.自动配置FeignAutoConfiguration spring-cloud-starter-openfeign 包含了 spring-cloud-openfeign-core FeignAutoCo…

QT_day5:使用定时器实现闹钟

1、 程序代码&#xff1a; widget.h&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime>//时间类 #include <QTimer>//时间事件类 #include <QTextToSpeech>//文本转语音类 QT_BEGIN_NAMESPACE namespace Ui { cla…

Python读取PDF文字转txt,解决分栏识别问题,能读两栏

搜索了一下&#xff0c;大致有这些库能将PDF转txt 1. PyPDF/PyPDF2&#xff08;截止2024.03.28这两个已经合并成了一个&#xff09;pypdf PyPI 2. pdfplumber GitHub - jsvine/pdfplumber: Plumb a PDF for detailed information about each char, rectangle, line, et cete…

R语言使用dietaryindex包计算NHANES数据多种营养指数(2)

健康饮食指数 (HEI) 是评估一组食物是否符合美国人膳食指南 (DGA) 的指标。Dietindex包提供用户友好的简化方法&#xff0c;将饮食摄入数据标准化为基于指数的饮食模式&#xff0c;从而能够评估流行病学和临床研究中对这些模式的遵守情况&#xff0c;从而促进精准营养。 该软件…

Notepad++:格式化json字符串(带转义)

目录 一、效果呈现 二、去除json字符串转义 三、格式化json字符串 一、效果呈现 格式化前 带字符串转义&#xff0c;带unicode编码字符 格式化后 二、去除json字符串转义 方法&#xff1a;采用Notepad的普通替换 第一&#xff1a;\"替换为" 第二&#xff1a;\\…

科技下乡:数字乡村改变乡村生活方式

在科技飞速发展的时代&#xff0c;数字化、信息化浪潮正以前所未有的速度席卷全球。在这场科技革命中&#xff0c;乡村不再是滞后的代名词&#xff0c;而是成为了数字乡村建设的热土。科技下乡&#xff0c;让数字乡村成为了改变乡村生活方式的重要力量。 一、科技下乡&#xf…

什么是量子计算?

什么是量子计算&#xff1f; 量子计算机仍处于起步阶段&#xff0c;正在影响已经在经典计算机上运行的新一代模拟&#xff0c;现在使用 NVIDIA cuQuantum SDK 进行加速。 在史蒂夫乔布斯 (Steve Jobs) 推出可以放入口袋的计算机之前 27 年&#xff0c;物理学家保罗贝尼奥夫 (P…

什么是JPA,JPA的概念

什么是JPA JPA&#xff08;Java Persistence API&#xff0c;Java持久化API&#xff09;&#xff0c;定义了对象-关系映射&#xff08;ORM&#xff09;以及实体对象持久化的标准接口,它是一套标准,具体的实现要根据不同的厂商来提供,就跟JDBC类型 持久化单元 持久化单元是运行…

【A-013】基于SSH的共享单车管理系统/共享单车出租系统

【A-013】基于SSH的共享单车管理系统/共享单车出租系统 开发环境&#xff1a; Eclipse/MyEclipse、Tomcat8、Jdk1.8 数据库&#xff1a; MySQL 适用于&#xff1a; 课程设计&#xff0c;毕业设计&#xff0c;学习等等 系统介绍&#xff1a; 基于SSH开发的共享单车管理系统/…

基于JavaSpringmvc+myabtis+html的鲜花商城系统设计和实现

基于JavaSpringmvcmyabtishtml的鲜花商城系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末…

leecode 331 |验证二叉树的前序序列化 | gdb 调试找bug

计算的本质是数据的计算 数据的计算需要采用格式化的存储&#xff0c; 规则的数据结果&#xff0c;可以快速的按照指定要求存储数据 这里就不得不说二叉树了&#xff0c;二叉树应用场景真的很多 本题讲的是&#xff0c;验证二叉树的前序序列化 换言之&#xff0c;不采用建立树的…

Redis怎么测?这篇文章写的太全了

Redis是一个高性能、内存数据库和缓存系统&#xff0c;在开发和生产环境中被广泛应用。本文将介绍如何进行有效的Redis软件测试&#xff0c;以确保其稳定性、高性能和可靠性。 Redis作为一种非关系型数据库和缓存系统&#xff0c;被广泛用于支持高流量、低延迟的应用。为了保证…

算法学习——LeetCode力扣动态规划篇9(1035. 不相交的线、53. 最大子数组和、392. 判断子序列、115. 不同的子序列)

算法学习——LeetCode力扣动态规划篇9 1035. 不相交的线 1035. 不相交的线 - 力扣&#xff08;LeetCode&#xff09; 描述 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#x…

【分析教程】unity游戏修改so文件

基础知识 0x1.apk安装后在手机中的目录 apk安装后会在两个包下生成相关包&#xff1a;data/data/、data/app/。 这里拿网易云音乐的安装目录举例。Data/App目录下通常会有三个文件&#xff1a; lib文件夹&#xff08;包含so库文件&#xff09;、 ‚oat文件夹&#xff08;O…