sqlite3模块的使用

news2024/11/24 22:55:33

1. SQLite数据库

SQLite是一个轻量级的, 基于磁盘的, 关系型的数据库管理系统(RDBMS).
它不需要一个独立的服务器进程或操作系统级别的配置.
SQLite是D.Richard Hipp在2000年创建的, 并且由于其小巧, 快速, 可靠和易于使用的特性, 它在全球范围内得到了广泛的应用.

以下是 SQLite 的一些主要特点和优势:
* 1. 轻量级: SQLite的整个数据库就是一个单一的磁盘文件, 可以很容易地在不同的设备之间移动和复制.
* 2. 零配置: 不需要安装或配置, 只需要将SQLite库与你的应用程序一起编译即可.
* 3. 跨平台: 支持Windows, Linux, macOS, Android, iOS等多种操作系统.
* 4. 支持SQL92标准: 虽然SQLite是一个轻量级的数据库, 但它支持大部分SQL92标准的功能.
* 5. 事务完整: SQLite支持ACID事务, 这意味着数据库操作是原子性, 一致性, 隔离性和持久性的.
* 6. 零服务器: SQLite不需要像MySQL, PostgreSQL或Oracle这样的中央服务器. 它直接从磁盘文件读取和写入数据.
* 7. 可扩展性: 虽然SQLite本身是一个简单的数据库引擎, 但它允许用户通过创建虚拟表
     (如全文搜索, R-Tree, 用户定义的函数等)来扩展其功能.
* 8. 内存效率: SQLite使用了一种独特的B-Tree数据结构来存储数据, 这使得它在处理大量数据时非常高效.
* 9. 安全性: SQLite支持加密和完整性检查, 以确保数据的安全性和一致性.

虽然它的功能不如一些更复杂的关系型数据库强大, 但SQLite提供了足够的功能来满足许多常见的数据存储和检索需求.
由于SQLite的轻量级和易用性, 它被广泛用于各种应用程序中, 包括Web浏览器, 移动应用, 嵌入式系统, 桌面应用等.

2. sqlite3模块

SQLite3是一个轻量级的, 内嵌式的, 关系型数据库管理系统, 它不需要一个独立的服务器进程或操作系统级别的配置.
Python的sqlite3模块提供了一个轻量级的磁盘上数据库, 它不需要单独的服务器进程或操作系统特定的配置.
Python的标准库中包含了一个名为sqlite3的模块, 它提供了与SQLite数据库交互的接口.
使用这个模块, Python开发者可以轻松地创建, 查询, 更新和删除SQLite数据库中的数据.
要在Python中使用SQLite3, 可以简单地导入sqlite3模块, 并使用它提供的类和函数来创建和操作数据库.
以下是一个简单的例子, 展示了如何在Python中使用SQLite3来创建一个数据库, 一个表, 并插入一些数据:
import sqlite3  
  
# 连接到SQLite数据库(如果不存在, 它将被创建)  
# 数据库文件是test.db  
# 如果数据库文件与Python脚本在同一目录下
conn = sqlite3.connect('test.db')
 
cur = conn.cursor()  # 连接到一个 SQLite 数据库并创建一个游标对象(用于执行SQL语句并获取结果)


# 创建了一个名为user的表, 其中包含了两个个字段: username, password.
# username和password字段被定义为varchar(12)类型, 这意味着它们可以存储最多12个字符的变长字符串.
cur.execute('''CREATE TABLE user  
             (username varchar(12), password varchar(12))''')  
  
# 插入数据, 防止sql注入使用?作为占位符 
cur.execute("INSERT INTO user VALUES (?, ?)", ('张三', 123))  
  
# 保存(commit)更改  
conn.commit()  

# 查询数据
sql = cur.execute("SELECT * FROM user")
print(sql)
  
# 关闭连接  
conn.close()
在这个例子中, 首先导入了sqlite3模块, 并使用sqlite3.connect()函数连接到一个SQLite数据库文件(在这个例子中是 test.db).
如果该文件不存在, SQLite将自动创建一个新的数据库文件.
然后, 创建了一个Cursor对象, 并使用这个对象来执行SQL命令.
在这个例子中, 我们创建了一个表, 并插入了一行数据(需要使用commit()方法保存了更改), 
最后, 查询数据库的所有记录, 并关闭了到数据库的连接.

请注意, 在实际应用中, 可能需要处理一些错误, 比如当尝试创建一个已经存在的表时.
此外, 你还需要考虑在关闭数据库连接之前确保所有的更改都已经被保存.

image-20240615132218150

3. sqlite_master

sqlite_master是SQLite数据库中的一个内置系统表, 它具有以下主要特点和功能:
* 1. 概述:
     sqlite_master表存储着当前数据库中所有表, 索引, 视图和触发器的相关信息.
     它包含了关于这些数据库对象的元数据, 如对象的名称, 类型, 用于创建它们的SQL语句等.

* 2. 结构:
     sqlite_master表具有固定的结构, 包括以下几个字段:
     type: 表示对象的类型, 如'table', 'index', 'view'或'trigger'.
     name: 对象的名称.
     tbl_name: 对于索引, 这是索引所属的表的名称; 对于其他对象类型, 此字段与name字段相同.
     rootpage: 该对象在数据库文件中的根页面编号(对于理解SQLite的内部结构很重要, 但通常用户不需要关心).
     sql: 用于创建该对象的SQL语句.

* 3. 权限.
     sqlite_master表是只读的, 用户只能对其进行读操作.
     写操作(如创建, 修改或删除表)会自动更新此表, 但用户不能直接修改它.

* 4. 应用场景:
     用户可以使用SELECT查询从sqlite_master表中检索关于数据库对象的信息.
     例如, 要查询某个表是否存在, 可以执行类似`SELECT * FROM sqlite_master WHERE type='table' AND name='表名';的查询.
     要查询某个索引的信息, 可以设置type字段为'index'并指定索引名.

* 5. 临时表:
     需要注意的是, 临时表的信息不存储在sqlite_master表中, 而是存储在另一个名为SQLITE_TEMP_MASTER的表中,
     其结构与sqlite_master相同.

4. 查询表是否存在

# 查询表是否存在
import sqlite3


def table_exists(conn, table_name):
    cur = conn.cursor()
    cur.execute(f"SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}';")
    result = cur.fetchone()
    return result is not None  # 条件表达式, 判断result是否为None


# 连接到SQLite数据库
conn = sqlite3.connect('test.db')

# 检查表是否存在
if table_exists(conn, 'user'):
    print("表 user 存在")
else:
    print("表 user 不存在")

# 关闭连接
conn.close()

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

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

相关文章

最长回文子串问题详解

最长回文子串的问题描述:给出一个字符串S,求S的最长回文子串的长度。 针对这个问题,先看暴力解法:枚举子串的两个端点i和j,判断在[i,j]区间内的子串是否回文。从复杂度上来看,枚举端点需要,判断…

【招联消费金融股份】有限公司2024年5月18日【算法开发岗暑期实习】一面试经验分享

招联消费金融股份有限公司2024年5月18日面试经验分享 面试流程:共30多分钟,先3分钟自我介绍,然后细细介绍简历上面的论文和实习信息。问题1:扩散模型的noise schedule有什么研究。问题2:有哪些常见的数学分布问题3&…

数据结构:冒泡排序,选择排序,插入排序,希尔排序的实现分析

✨✨小新课堂开课了,欢迎欢迎~✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:数据结构与算法 小新的主页:编程版小新-CSDN博客 1.冒泡排序 1.1算法思想 冒泡排序的基本思想就是&a…

关于Java

关于Java Java语言关于并发JVM调优工具写在最后 Java语言 Java语言作为当下主流开发语言,其面向对象的开发模式以及一次编译多次运行,跨平台运行以及自动的垃圾回收机制可以说是给开发者节省了很大的时间用于逻辑功能的开发,那么在开发过程中…

【靶场搭建】-02- 搭建OWASP靶机

1.OWASP靶机介绍 相比较其他靶机,OWASP提供的环境更多,且包含了许多其他靶机的环境,属于性价比比较高的靶机了。 2.下载OWASP 访问以下地址进行下载: https://sourceforge.net/projects/owaspbwa/ 因为OWASP是虚拟机文件&…

C++初学者指南第一步---1. C++开发环境设置

C初学者指南第一步—1. C开发环境设置 目录 C初学者指南第一步---1. C开发环境设置1.1 工具1.1.1 代码编辑器和IDE1.1.2 Windows1.1.3 命令行界面 1.2 编译器1.2.1 gcc/g (支持Linux/Windows/MacOSX)1.2.2 clang/clang (支持Linux/Windows/MacOS)1.2.3 Microsoft Visual Studio…

Jackson的使用

一引入依赖 <!--Jackson是spring-boot-starter-json的一个依赖&#xff08;spring-boot-starter-web中包含spring-boot-starter-json&#xff09;。也就是说&#xff0c;当项目中引入spring-boot-starter-web后会自动引入spring-boot-starter-json --> <dependency&g…

vue关于:deep穿透样式的理解

情况一 子组件&#xff1a; <div class"child"><div class"test_class">test_class<div class"test1">test1<div class"test2">test2</div></div></div></div>父组件&#xff1a; …

麒麟系统mate_indicators进程占用内存资源高

一、问题现象 故障现象&#xff1a;环境出现内存溢出 操作系统&#xff1a;KYlin10-SP2 二、问题定位 发现mate-indicators进程占用内存资源达到节点总内存40%&#xff0c;导致服务出现内存熔断 临时解决 systemctl restart lightdm.service systemctl set-default multi-u…

使用itextPDF实现PDF电子公章工具类

一、制作公章 在线网站&#xff1a;印章生成器 - Kalvin在线工具 (kalvinbg.cn) 然后对公章进行下载保存 盖章图片&#xff1a; 二、生成数字签名 2.1&#xff1a; java工具keytool生成p12数字证书文件 Keytool是用于管理和证书的工具&#xff0c;位于%JAVA_HOME%/bin目录。…

数学建模----单源最短路径模型建立和求解

目录 1.引言和声明 2.单源最短路径 3.建立模型 4.代码求解 1.引言和声明 &#xff08;1&#xff09;最近又在准备学习matlab,有了一些新的理解和体会&#xff0c;记录一下&#xff1b; &#xff08;2&#xff09;这个首先要声明两个符号&#xff0c;这两个符号也是今天才知…

抖音混剪素材哪里找?可以混剪搬运视频素材网站分享

在抖音上制作精彩的视频离不开高质量的素材资源。今天&#xff0c;我将为大家推荐几个优质的网站&#xff0c;帮助你解决素材短缺的问题。这些网站不仅提供丰富的素材&#xff0c;还符合百度SEO优化的规则&#xff0c;让你的视频更容易被发现。 蛙学府素材网 首先要推荐的是蛙…

AOP切面加自定义注解,实现日志记录

AOP切面加自定义注解&#xff0c;实现日志记录 一、AOP二、准备工作三、添加AOP&#xff0c;把日志保存到数据库 一、AOP 在软件业&#xff0c;AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期动态代理实…

IT入门知识博客文章大纲第二部分《编程语言》(2/10)

目录 IT入门知识博客文章大纲第二部分《编程语言》 1.引言 2.编程语言概述 2.1 编程语言的发展历程 2.2 编程范式 3.常见的编程语言 3.1 Python 3.2 Java 3.3 C 3.4 JavaScript 3.5 Ruby 4.编程语言的选择 4.1 技术需求 4.2 团队技能 4.3 社区和生态系统 4.4 可…

3d渲染的类型,渲染100邀请码1a12

3D渲染有不同的类型和方法&#xff0c;它们各有各的优缺点和适用场景&#xff0c;这里我们简单介绍下。 1、离线渲染 离线渲染也被称作预渲染&#xff0c;是指在不考虑时间限制的情况下&#xff0c;生成高质量二维图像或视频的方法。离线渲染通常用于电影、广告、设计等非交互…

【LeetCode】LCR 124. 推理二叉树

题目链接&#xff1a; 题目描述&#xff1a;某二叉树的先序遍历结果记录于整数数组 preorder&#xff0c;它的中序遍历结果记录于整数数组 inorder。请根据 preorder 和 inorder 的提示构造出这棵二叉树并返回其根节点。 注意&#xff1a;preorder 和 inorder 中均不含重复数字…

ESD与EOS区别

最近小白在做项目时&#xff0c;被一个实习生问道了&#xff0c;关于EOS与ESD区别。说实话&#xff0c;以前专注于测试debug的我&#xff0c;在回答对方时&#xff0c;并没法做到太全面的解答。于是乎&#xff0c;借助周内的空闲时间&#xff0c;小白还是简单学习总结了一番。 …

68. UE5 RPG 优化敌人角色的表现效果

我们现在已经有了四个敌人角色&#xff0c;接下来&#xff0c;处理一下在战斗中遇到的问题。 处理角色死亡后还会攻击的问题 因为我们有角色溶解的效果&#xff0c;角色在死亡以后的5秒钟才会被销毁掉。所以在这五秒钟之内&#xff0c;角色其实还是会攻击。主要时因为AI行为树…

Python开发者的7个PyCharm必备插件

大家好&#xff0c;本文将推荐使用7个必备的PyCharm IDE设置和插件&#xff0c;希望能帮助了解如何修改和增强IDE体验&#xff0c;使其更适合个人使用&#xff0c;毕竟作为开发者&#xff0c;大部分时间都是在这里工作。 1.String Manipulation 【链接】&#xff1a;https://…

【机器学习】机器学习重要分支——强化学习:从理论到实践

文章目录 强化学习&#xff1a;从理论到实践引言第一章 强化学习的基本概念1.1 什么是强化学习1.2 强化学习的基本组成部分1.3 马尔可夫决策过程 第二章 强化学习的核心算法2.1 Q学习2.2 深度Q网络&#xff08;DQN&#xff09;2.3 策略梯度方法 第三章 强化学习的应用实例3.1 游…