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

news2024/11/27 17:43:39

目录

  • 前言
  • 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.coloradmin.cn/o/1560766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker镜像构建

Docker镜像构建 1. docker commit 平常我们都是从公共仓库拉取镜像,我们也可以从容器中构建我们自己的镜像。 需求: 1. 基础镜像centos 2. 安装jdk 3. 安装nginx1.1 创建容器 # 拉取镜像 docker pull centos:7 # 创建容器 docker run -di --name ce…

鸿蒙实战开发-如何使用三方库

使用三方库 在使用三方库之前,需要安装 ohpm,并在环境变量中配置。 在项目目录的Terminal窗口执行ohpm命令下载依赖 ohpm install yunkss/eftool 命令运行成功后,在项目的oh-package.json5文件中会自动添加上依赖,如下所示&am…

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

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

react 面试题(2024 最新版)

1. 对 React 的理解、特性 React 是靠数据驱动视图改变的一种框架,它的核心驱动方法就是用其提供的 setState 方法设置 state 中的数据从而驱动存放在内存中的虚拟 DOM 树的更新 更新方法就是通过 React 的 Diff 算法比较旧虚拟 DOM 树和新虚拟 DOM 树之间的 Chan…

Docker搭建LNMP环境实战(07):安装nginx

1、模拟应用场景描述 假设我要搭建一个站点,假设虚拟的域名为:api.test.site,利用docker实现nginxphp-fpmmariadb部署。 2、目录结构 2.1、dockers根目录 由于目前的安装是基于Win10VMWareCentOS虚拟机,同时已经安装了VMWareT…

【React】vite + react 项目,配置项目路径别名 @

vite react 项目,配置项目路径别名 1 安装 types/node2 在 vite.config.ts 中添加配置:3 配置路径别名的提示 使用 vite 开发 react 项目时,可以通过一下步骤配置路径别名: 1 安装 types/node npm i -D types/node2 在 vite.con…

vue3组合式函数

vue3的组合式函数的作用是封装和复用响应式状态的函数。只能在setup 标签的script标签汇总或者setup函数中使用。 普通的函数只能调用一次,但是组合式函数接受到响应式参数,当该值发生变化时,也会触发相关函数的重新加载。 如下 定义了一个…

聊一聊电子邮件?

电子邮件是什么? 电子邮件是一种基于客户/服务器架构的应用。功能是实现人与人之间的交流。直到现在,电子邮件依然是当前因特网 注意:基于客户/服务器方式和基于B/S架构不一样!客户/服务器表示的范围更广,当基于客户…

matlab安装第三方工具箱

1.下载工具箱,放到toolbox目录下 下载的第三方工具箱: 将上述文件按照如下规则放到Matlab安装目录下的toolbox文件夹中: 2.在matlab中设置路径,安装工具

【爬虫框架Scrapy】02 Scrapy入门案例

接下来介绍一个简单的项目,完成一遍 Scrapy 抓取流程。通过这个过程,我们可以对 Scrapy 的基本用法和原理有大体了解。 1. 本节目标 本节要完成的任务如下。 创建一个 Scrapy 项目。 创建一个 Spider 来抓取站点和处理数据。 通过命令行将抓取的内容…

【Go】八、常用字符串函数与时间函数

文章目录 1、字符串常用的函数2、常用的时间函数3、内置函数 1、字符串常用的函数 核心包strings 求字符串长度,按字节(len函数内置,不用导包) 字符串遍历 //转切片 r:[]rune(str)字符串与整数的互转 查找是否包含子字符串 re…

【论文极速读】 指令微调BLIP:一种对指令微调敏感的Q-Former设计

【论文极速读】 指令微调BLIP:一种对指令微调敏感的Q-Former设计 FesianXu 20240330 at Tencent WeChat search team 前言 之前笔者在[1]中曾经介绍过BLIP2,其采用Q-Former的方式融合了多模态视觉信息和LLM,本文作者想要简单介绍一个在BLIP2…

Docker基础系列之TLS和CA认证

Docker基础系列之TLS和CA认证 文章目录 Docker基础系列之TLS和CA认证1. 引言2. 初识TLS和CA3. 开启TLS和CA认证3.1 生成证书3.2 配置TLS 4. 参考和感谢 1. 引言 我们日常工作当中会遇到这些需求: 监控Docker容器在idea开发工具中连接Docker,直接发布至…

电脑端手机配置检测工具推荐与使用指南

摘要 本文介绍了如何使用克魔助手工具在电脑上检测手机的配置信息。通过该工具,用户可以全面了解手机的硬件和操作系统信息,包括电池、CPU、内存、基带信息和销售信息等。 引言 在日常工作中,了解手机的配置信息对于开发和测试人员非常重要…

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

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

Gradle 使用详解

目录 一. 前言 二. 下载与安装 2.1. 下载 2.2. 配置环境变量 2.3. 配置镜像 2.3.1. 全局设置 2.3.2. 项目级设置 三. Gradle 配置文件 3.1. build.gradle 3.2. settings.gradle 3.3. gradle.properties 3.4. init.d 目录 3.5. buildSrc 目录 四. Java Library 插…

[flask]请求全局钩子

flask从入门到精通之钩子、异常、context、jinjia模板、过滤器 - 异步非阻塞 - 博客园 (cnblogs.com) 参考的这个博客,但有一个需要注意的是,最新版本的flask不知道是不是更新了还是怎么了,他的before_first_request不见了,如果继…

17.应用负载压力测试

早些点,下午题考,最近几年出现的少; 备考较为简单;历年真题相似度高; 主要议题: 1.负载压力测试概述 注意这些测试细微的差别; 负载测试和压力测试的方法比较相似,但是目的不同&a…

科研学习|论文解读——情感对感知偶然信息遭遇的影响研究(JASIST,2022)

原文题目 Investigating the impact of emotions on perceiving serendipitous information encountering 一、引言 serendipity一词最初是由霍勒斯沃波尔创造的,他将其定义为“通过意外和睿智发现你并不追求的事物”。信息研究中大多数现有的偶然性定义从几个角度看…

LeetCode 第391场周赛个人题解

目录 哈沙德数 原题链接 思路分析 AC代码 换水问题 II 原题链接 思路分析 AC代码 交替子数组计数 原题链接 思路分析 AC代码 最小化曼哈顿距离 原题链接 思路分析 AC代码 哈沙德数 原题链接 思路分析 签到题,不说了 AC代码 class Solution:def s…