sqlite3模块的使用

1. SQLite数据库

ABAP 复制代码
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模块

ABAP 复制代码
SQLite3是一个轻量级的, 内嵌式的, 关系型数据库管理系统, 它不需要一个独立的服务器进程或操作系统级别的配置.
Python的sqlite3模块提供了一个轻量级的磁盘上数据库, 它不需要单独的服务器进程或操作系统特定的配置.
ABAP 复制代码
Python的标准库中包含了一个名为sqlite3的模块, 它提供了与SQLite数据库交互的接口.
使用这个模块, Python开发者可以轻松地创建, 查询, 更新和删除SQLite数据库中的数据.
ABAP 复制代码
要在Python中使用SQLite3, 可以简单地导入sqlite3模块, 并使用它提供的类和函数来创建和操作数据库.
以下是一个简单的例子, 展示了如何在Python中使用SQLite3来创建一个数据库, 一个表, 并插入一些数据:
python 复制代码
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()
ABAP 复制代码
在这个例子中, 首先导入了sqlite3模块, 并使用sqlite3.connect()函数连接到一个SQLite数据库文件(在这个例子中是 test.db).
如果该文件不存在, SQLite将自动创建一个新的数据库文件.
然后, 创建了一个Cursor对象, 并使用这个对象来执行SQL命令.
在这个例子中, 我们创建了一个表, 并插入了一行数据(需要使用commit()方法保存了更改), 
最后, 查询数据库的所有记录, 并关闭了到数据库的连接.

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

3. sqlite_master

ABAP 复制代码
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. 查询表是否存在

python 复制代码
# 查询表是否存在
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()
相关推荐
学地理的小胖砸17 分钟前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai12344 分钟前
Redis解析
数据库·redis·缓存
数据库幼崽1 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd1 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou2 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh2 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵3 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多4 小时前
Linux——mysql主从复制与读写分离
数据库·mysql
初次见面我叫泰隆4 小时前
MySQL——1、数据库基础
数据库·adb
Chasing__Dreams4 小时前
Redis--基础知识点--26--过期删除策略 与 淘汰策略
数据库·redis·缓存