使用SQLite

news2024/9/18 13:12:57

自学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, '明日科技小助手')]

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

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

相关文章

微量氧传感器在3D打印中的应用

3D打印为什么需要监测氧气? 金属 3D 打印过程涉及使用激光技术将细金属粉末一层一层地熔合在一起。在制造零件的同时将杂质风险降至比较低是金属增材制造行业面临的主要挑战。金属 3D 打印机通常将其原料送入惰性环境中,以消除污染并防止质量问题。氩气…

【自撰写】【国际象棋入门】第6课 常见术语分析(一)吃双和抽将

第6课 常见术语分析(一)吃双和抽将 本次课中,我们介绍几种最为常见和常用的(单步棋形成)的局面、术语并对其进行简单的分析。一般说来,这些局面都会给予一方以“立竿见影”的优势,或者引向之后…

瑞尼克定制聚四氟乙烯布氏漏斗配抽滤瓶四氟抽滤装置药厂

一、产品介绍 布氏漏斗是实验室中使用的一种仪器,用来使用真空或负压力抽吸进行过滤。布氏漏斗可代替陶瓷布氏漏斗,避免碎裂,聚四氟乙烯材质的布氏漏斗性强,使用真空或负压力抽吸进行过滤也可与吸滤瓶配套,用于无机制…

window 卸载应用商店程序

# 使用Get-AppxPackage获取所有应用程序 # 使用Remove-AppxPackage PythonSoftwareFoundation.Python.3.12_3.12.1264.0_x64__qbz5n2kfra8p0

2024请收好这一份全面--详细的AI产品经理从业指南

前言 入行人工智能领域这段时间以来,从零到一把AI推荐系统产品化搭建了起来,也与很多同行AI产品经理小伙伴建立了联系。AI产品经理工作内容各异,不同AI产品化生命周期中更是大为不同,但对想入行AI产品经理的小伙伴来讲&#xff0…

聊一聊生成式AI

生成式AI(Generative AI)是指一类能够自主创造新内容的人工智能技术,这些内容可以是文本、图像、音频、视频等。与传统的分析性或分类性AI系统不同,生成式模型的主要任务不是对现有数据进行分类或预测,而是生成全新的、…

【C语言 || 排序】希尔排序

文章目录 前言1.希尔排序1.1 直接插入排序1.2 直接插入排序的实现1.2.1 直接插入排序的代码实现 1.3 直接插入排序的时间复杂度1.4 希尔排序1.4.1 希尔排序概念1.4.1 希尔排序的代码实现 前言 1.希尔排序 1.1 直接插入排序 在写希尔排序之前,我们需要先了解直接插入…

电压模式R-2R DAC的工作原理和特性

本文将探讨电压模式R-2R DAC结构。 在本文中,我们将探索什么是R-2R DAC以及如何实现它们。 首先,我们将简要回顾一下开尔文分压器DAC。这种结构很简单,但它们需要大量的电阻和开关来实现高分辨率DAC。这个问题的一个解决方案是称为R-2R DAC…

【python】用代码实现2024中科大强基计划数学科目第一题

题目: 已知正整数a,b,c满足10a11b12c123,,则(a,b,c)的组数是 思路: 为了找出满足等式 10a 11b 12c 123 的正整数三元组 (a, b, c) 的数量,我们可以使用Python编写一个简单的循环来遍历可能的 a、b 和…

哪种考勤机好用,常见好用的考勤机种类

哪种考勤机好用,常见好用的考勤机种类 用考勤机完成上下班打卡制度,极大地为人事对公司的管理提供了便利。不同种类的考勤机均有各自的长处,那么究竟哪种考勤机比较好用呢?其中,智能云考勤机能够实现异地手机打卡&…

推荐一个Python的前端框架Streamlit

WHY,为什么要用Streamlit 你是不是也想写一个简单的前端界面做些简单的展示和控制,不想写html、css、js,也用不到前后端分离,用不到特别复杂的Flask、Django等,如果你遇到类似这样的问题,我推荐你试试Stre…

Linux下调试代码——gdb的使用

1. 文件准备: 测试代码: Makefile文件: 执行结果: 此时,我们的结果是存在问题的,即最终结果少了100。现在我们用gdb来调试它。 我们发现我们还没有安装gdb,这里安装一下。 2. 环境准备&#…

CUDA系列-Mem-9

这里写目录标题 Static Architecture.Abstractions provided by CUSW_UNIT_MEM_MANAGERMemory Object (CUmemobj) Memory Descriptor(CUmemdesc)Memory Block(CUmemblock)Memory BinsSuballocations in Memory BlockFunctional description Memory Manager 你可能觉得奇怪&…

MacOS之解决:开盖启动问题(七十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

LSTM架构的演进:LSTM、xLSTM、LSTM+Transformer

文章目录 1. LSTM2. xLSTM2.1 理论介绍2.2 代码实现 3. LSTMTransformer 1. LSTM 传统的 LSTM (长短期记忆网络) 的计算公式涉及几个关键部分:输入门、遗忘门、输出门和单元状态。 2. xLSTM xLSTM之所以称之为xLSTM就是因为它将LSTM扩展为多个LSTM的变体&#xff…

Spring的自动注入(也称为自动装配)

自动注入(也称为自动装配)是Spring框架中的一个核心概念,它与手动装配相对立,提供了一种更简洁、更灵活的方式来管理Bean之间的依赖关系。 在Spring应用程序中,如果类A依赖于类B,通常需要在类A中定义一个类…

终极版本的Typora上传到博客园和csdn

激活插件 下载网址是这个: https://codeload.github.com/obgnail/typora_plugin/zip/refs/tags/1.9.4 解压之后这样的: 解压之后将plugin,复制到自己的安装目录下的resources 点击安装即可: 更改配置文件 "dependencies&q…

SSMP整合案例

黑马程序员Spring Boot2 文章目录 1、创建项目1.1 新建项目1.2 整合 MyBatis Plus 2、创建表以及对应的实体类2.1 创建表2.2 创建实体类2.2.1 引入lombok,简化实体类开发2.2.2 开发实体类 3、数据层开发3.1 手动导入两个坐标3.2 配置数据源与MyBatisPlus对应的配置3…

第1讲:创建vite工程,使用框架为Vanilla时,语言是typescript,修改http端口的方法

直接在项目根目录创建 vite.config.ts文件。 在该文件中添加内容: import { defineConfig } from vite;export default defineConfig({server: {port: 7777,}, });最后尝试运行package.json中的Debug

【图解IO与Netty系列】Netty编解码器、TCP粘包拆包问题处理、Netty心跳检测机制

Netty编解码器、TCP粘包拆包问题处理、Netty心跳检测机制 Netty编解码器编码器解码器编解码器Netty提供的现成编解码器 TCP粘包拆包问题处理Netty心跳检测机制 Netty编解码器 网络传输是以字节流的形式传输的,而我们的应用程序一般不会直接对字节流进行处理&#x…