您的位置:首页 > 教育 > 培训 > sqlite3模块的使用

sqlite3模块的使用

2024/10/5 23:27:07 来源:https://blog.csdn.net/qq_46137324/article/details/139723300  浏览:    关键词: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 sqlite3def 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()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com