sqlite3模块的使用

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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目干系人管理

目录 1.概述 2.四个子过程 2.1. 识别干系人(Identify Stakeholders) 2.2. 规划干系人参与(Plan Stakeholder Engagement) 2.3. 管理干系人参与(Manage Stakeholder Engagement) 2.4. 监督干系人参与&…

Dell戴尔灵越Inspiron 16 Plus 7640/7630笔记本电脑原装Windows11下载,恢复出厂开箱状态预装OEM系统

灵越16P-7630系统包: 链接:https://pan.baidu.com/s/1Rve5_PF1VO8kAKnAQwP22g?pwdjyqq 提取码:jyqq 灵越16P-7640系统包: 链接:https://pan.baidu.com/s/1B8LeIEKM8IF1xbpMVjy3qg?pwdy9qj 提取码:y9qj 戴尔原装WIN11系…

【stm32单片机应用】基于I2C协议的OLED显示(利用U82G库)

一、U8g2库 (一)U8g2简介 U8g2 是一个用于单色和彩色显示的嵌入式图形库,特别适用于单色OLED、LCD显示屏的驱动。它是对早期U8g库的扩展和改进,提供了更多功能和更广泛的硬件支持。U8g2作为一款强大而灵活的嵌入式图形库&#x…

HTML和CSS基础(一)

前言 HTML(HyperText Markup Language)是一种用于创建网页的标准标记语言。它由各种标签组成,这些标签定义了网页的结构和内容。HTML的早期形式诞生于1989年,由CERN的物理学家Tim Berners-Lee发明,最初用于在科学家之…

springCloudAlibaba之分布式网关组件---gateway

gateway-网关 网关spring cloud gatewaygateway初体验gateway整合nacos简写方式 网关 在微服务架构中一个系统会被拆分成多个微服务。那么作为客户端(前端)要如何去调用这么多的微服务?如果没有网关的存在,我们只能在客户端记录每个微服务的地址&#xf…

探索AI绘画工具的前沿:创新科技与艺术的无缝融合

在科技和艺术交织的时代,AI绘画工具以其独特的魅力引领着创作的新潮流。本文将带您深入了解AI绘画工具的前沿技术,并通过最新例子展示其实际应用和潜力。 AI绘画工具概述 AI绘画工具通过集成深度学习、自然语言处理等技术,实现了从文字描述…

【新课程】PICO VR 交互开发指南

从PICO开始,迈向XR跨平台开发 Unity XR Interaction Toolkit (简称XRI)是一套跨平台的 XR 交互开发工具包,随着版本的更新与完善,逐渐获得了开发者的青睐。各 XR 平台逐步推荐开发者采用 XRI 作为首选的交互开发工具为…

软件方案评审与模块优化:从FOC模块出发的电控平台建设

一、背景 洞悉模块发展趋势,定制行业应用特点,明确优化方向与阶段性目标 随着科技进步的飞速发展,模块化设计已成为众多行业产品开发的核心理念。无论是软件系统、硬件组件,还是复杂系统中的功能模块,都需要对其发展…

部署LVS—DR群集

1、LVS-DR工作流向分析 (1)客户端发送请求到 Director Server(负载均衡器),请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP)到达内核空间。 (2)Director Server 和 Real Se…

基于Matlab停车场车牌识别计时计费管理系统 【W2】

简介 停车场车牌识别计时计费管理系统在现代城市管理中具有重要意义。随着城市化进程的加快和车辆数量的增加,传统的人工管理停车场的方式已经难以满足效率和精确度的要求。因此引入车牌识别技术的自动化管理系统成为一种趋势和解决方案。 背景意义 提升管理效率&a…

腾讯云[HiFlow】| 自动化 -------HiFlow:还在复制粘贴?

文章目录 前言:一:HiFlow是什么二:功能介绍1.全连接2.自动化2.1定时处理特定任务2.2实时同步变更信息2.3及时获取通知提醒 3.零代码4.多场景5.可信赖 三:用户体验最后 前言: 随着网络时代的不断发展,自动化…

QT:day1

思维导图 qt制作暴雪登入器 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {this->setWindowTitle("BATTLENET");//总体登陆器设置this->resize(455,650);this->setStyleSheet("background-color:rgb(21,23,…

【C++】多态|原理|override|final|抽象类|多继承虚函数表|对象模型|虚表打印|(万字详解版)

目录 ​编辑 一.多态的概念 二.多态的构建 虚函数 重写 虚函数重写的例外 协变 隐藏 析构函数的重写 三.重载、重写(覆盖)、隐藏(重定义)的对比 四.C11新增的 override 和 final override final 五.抽象类 六.多态的原理 虚函数表 总结: 引用…

HCS-华为云Stack-容器网络

HCS-华为云Stack-容器网络 容器隧道overlay VPC网络

Windows给右键菜单添加新建.htm和.html的选项,并使用不同名称

添加新建 .html 文件的右键菜单选项 运行regedit打开注册表编辑器给计算机\HKEY_CLASSES_ROOT\.html新增,名为: ShellNew 的项, 名称不区分大小写, 可以写成shellnew给 ShellNew项 新增字符串值 命名为FileName 或 ‘NullFile’, 名称不区分大小写, 可以写成filename或nullfil…

【C++进阶】RBTree封装map与set

1.红黑树的迭代器 1.1 begin() begin()就是红黑树的开头,那么对于红黑树来说按照中序序列是该树的最左节点。 Iterator Begin(){Node* leftMin _root;while (leftMin->_left){leftMin leftMin->_left;}return Iterator(leftMin);} 1.2 end() begin()就是…

flstudio怎么调中文

FL Studio设置中文的步骤如下: 打开FL Studio:首先,需要打开FL Studio编曲软件。 进入常规设置:在软件顶部菜单栏中,选择“OPTIONS”,然后点击“General setting”,进入常规设置窗口。 切换语言…

一个基于大模型的多功能的本地网页语音合成工具

ChatTTS-ui 是一个开源项目,这是一个利用 ChatTTS 技术将文本转换为语音的本地网页界面工具。它不仅支持中英文和数字的混合输入,还提供了丰富的API接口,为开发者和用户提供了极大的便利。 项目地址:https://github.com/jianchang…

CPP多线程

什么是多线程? 多线程是一种允许程序同时运行多个线程的技术。每个线程可以执行不同的任务,这在处理需要并发执行的操作时(例如,处理多个客户端的网络服务器,或者图形用户界面应用程序)非常有用。多线程能够…