首页 > 数据库 >如何使用 SQLite ?

如何使用 SQLite ?

时间:2024-07-25 10:29:33浏览次数:10  
标签:INSERT SQLite users age 如何 使用 数据库 name

SQLite 是一个轻量级、嵌入式的关系型数据库管理系统(RDBMS)。它是一种 C 库,实现了自给自足、无服务器、零配置、事务性 SQL 数据库引擎。SQLite 的源代码是开放的,完全在公共领域。它被广泛用于各种应用程序,包括浏览器、操作系统、移动应用等。

SQLite 的基本特性

  1. 轻量级:SQLite 的库文件非常小,通常只有几百KB。
  2. 自包含:SQLite 不依赖于外部的服务器进程,所有的数据都存储在一个单一的文件中。
  3. 零配置:无需安装和配置,数据库可以直接使用。
  4. 事务性:SQLite 支持原子性、可一致性、隔离性和持久性(ACID)的事务。
  5. 跨平台:SQLite 可以在 Windows、Linux、macOS、iOS 和 Android 等多个平台上运行。
  6. 高效:对于大多数单用户应用和嵌入式系统,SQLite 提供了足够的性能。

SQLite 安装和配置

使用 SQLite 不需要复杂的安装和配置步骤。大多数现代的编程语言和开发环境都内置了 SQLite 支持。以下是一些常见环境中如何安装和使用 SQLite 的方法:

在 Python 中使用 SQLite

Python 标准库中包含了 SQLite 的支持,可以通过 sqlite3 模块直接使用。

import sqlite3

# 创建数据库连接
conn = sqlite3.connect('example.db')

# 创建游标对象
cursor = conn.cursor()

# 创建表
cursor.execute('''CREATE TABLE IF NOT EXISTS users
                  (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')

# 插入数据
cursor.execute('''INSERT INTO users (name, age) VALUES (?, ?)''', ('Alice', 25))
cursor.execute('''INSERT INTO users (name, age) VALUES (?, ?)''', ('Bob', 30))

# 提交事务
conn.commit()

# 查询数据
cursor.execute('''SELECT * FROM users''')
rows = cursor.fetchall()
for row in rows:
    print(row)

# 关闭连接
conn.close()
在命令行中使用 SQLite

SQLite 提供了一个命令行工具,可以直接操作 SQLite 数据库。以下是一些常见的命令:

# 启动 SQLite 命令行工具
$ sqlite3 example.db

# 创建表
sqlite> CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);

# 插入数据
sqlite> INSERT INTO users (name, age) VALUES ('Alice', 25);
sqlite> INSERT INTO users (name, age) VALUES ('Bob', 30);

# 查询数据
sqlite> SELECT * FROM users;
1|Alice|25
2|Bob|30

# 退出命令行工具
sqlite> .exit

SQLite 的基本操作

创建数据库和表

在 SQLite 中,创建一个新的数据库实际上是创建一个新的文件。可以通过 sqlite3 工具或程序代码来创建数据库和表。

CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    age INTEGER NOT NULL
);
插入数据

可以使用 INSERT INTO 语句向表中插入数据。

INSERT INTO users (name, age) VALUES ('Charlie', 22);
查询数据

可以使用 SELECT 语句从表中查询数据。

SELECT * FROM users;
更新数据

可以使用 UPDATE 语句更新表中的数据。

UPDATE users SET age = 26 WHERE name = 'Alice';
删除数据

可以使用 DELETE 语句删除表中的数据。

DELETE FROM users WHERE name = 'Bob';
使用索引

索引可以加速数据库的查询速度。可以使用 CREATE INDEX 语句创建索引。

CREATE INDEX idx_name ON users (name);

高级功能

事务

事务是一组操作的集合,这些操作要么全部执行,要么全部不执行。SQLite 支持事务,并且默认在每个独立的 INSERTUPDATEDELETE 操作后自动提交事务。可以手动管理事务以提高性能。

BEGIN TRANSACTION;
INSERT INTO users (name, age) VALUES ('Dave', 28);
UPDATE users SET age = 29 WHERE name = 'Charlie';
COMMIT;
视图

视图是基于查询结果的虚拟表。可以使用 CREATE VIEW 语句创建视图。

CREATE VIEW user_names AS
SELECT name FROM users;
触发器

触发器是在某些表操作(如 INSERTUPDATEDELETE)发生时自动执行的一段代码。可以使用 CREATE TRIGGER 语句创建触发器。

CREATE TRIGGER user_age_check
BEFORE INSERT ON users
FOR EACH ROW
WHEN NEW.age < 0
BEGIN
    SELECT RAISE(FAIL, 'Age cannot be negative');
END;
外键约束

SQLite 支持外键约束,从而确保数据的完整性。可以在创建表时定义外键约束。

CREATE TABLE orders (
    id INTEGER PRIMARY KEY,
    user_id INTEGER,
    product TEXT,
    FOREIGN KEY (user_id) REFERENCES users (id)
);

性能优化

使用事务

将多个操作放在一个事务中可以显著提高性能。默认情况下,每个 INSERTUPDATEDELETE 操作后 SQLite 都会自动提交事务,这会导致大量的磁盘写入操作。可以通过手动管理事务来减少这种开销。

conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 开始事务
conn.execute('BEGIN TRANSACTION')

for i in range(1000):
    cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('User'+str(i), 20+i))

# 提交事务
conn.commit()
conn.close()
使用适当的数据类型

尽量使用合适的数据类型来存储数据,可以减少存储空间并提高查询性能。例如,使用 INTEGER 来存储数字,而不是使用 TEXT

创建索引

为常用的查询字段创建索引,可以显著提高查询速度。但是,索引也会增加插入和更新操作的开销,因此应根据实际情况平衡利弊。

SQLite 的常见应用场景

嵌入式系统

由于其轻量级和自包含的特性,SQLite 非常适合嵌入式系统和设备。例如,在智能手机、电视和车载系统中,SQLite 经常被用作本地数据存储解决方案。

单用户应用程序

对于单用户应用程序,如桌面软件或移动应用,SQLite 是一个理想的选择。它不需要服务器进程,部署简单,并且提供足够的性能和功能。

测试和开发

在开发和测试阶段,SQLite 可以用作快速原型设计和测试的小型数据库。由于其零配置特性,开发者可以轻松地创建和管理数据库。

分布式数据库系统的缓存或中转存储

在一些分布式数据库系统中,SQLite 可以用作缓存层或中转存储,从而减少对主数据库的压力,并提高系统的整体性能。

SQLite 的限制

尽管 SQLite 具有许多优点,但在某些场景中也存在一些限制:

  1. 并发访问:SQLite 对并发写入操作支持有限,适合单用户或低并发场景。
  2. 存储容量:SQLite 的单个数据库文件最大为 140TB,但实际应用中,由于性能和管理上的考虑,适合较小的数据集。
  3. 功能:虽然 SQLite 支持大多数标准 SQL 功能,但不支持某些高级特性,如存储过程、用户定义函数(UDF)和某些类型的复杂查询。

SQLite 是一个强大且灵活的嵌入式数据库解决方案,适用于多种应用场景。从基本的数据库操作到高级功能,如事务、视图和触发器,SQLite 提供了一个完整的 SQL 数据库引擎,并且易于使用和集成。尽管存在一些限制,但对于大多数嵌入式和单用户应用来说,SQLite 是一个理想的选择。

标签:INSERT,SQLite,users,age,如何,使用,数据库,name
From: https://blog.csdn.net/Itmastergo/article/details/140628813

相关文章

  • openfeign及熔断的使用以及传参方式的误区
    pom文件<!--熔断依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><!--引......
  • 连锁餐饮店如何快速实现低成本联网
    随着大众消费观念的转变、经济下行等诸多原因,消费降级让消费市场呈现低迷现状,尤其是餐饮行业,今年亏本经营甚至歇业闭店的门店数不胜数。为了应对营收降低的现状,提高门店持续经营的竞争力,降成本将是每个商家都关注的重点之一。网络作为餐饮店运营的重要基础设施,降低网络成本可作......
  • 电脑可以录屏吗?一步步教你如何操作
    随着电脑的普及和互联网的快速发展,人们对电脑录屏的需求日益增强。无论是录制游戏精彩时刻、制作教程、还是在线会议记录,电脑录屏都发挥着重要作用。但是很多人不知道电脑可以录屏吗,本文将详细介绍两种主流的电脑录屏方法,帮助用户轻松掌握电脑录屏技巧。电脑可以录屏吗?电脑......
  • python webbrowser.open 不使用默认浏览器
    对你们来说这是一个好奇的家伙..在我的python程序中webbrowser.open('etc..')打开MicrosoftEdge现在奇怪的是,我在与opensChrome(我的默认值)稍有不同的文件夹中还有另一个python程序关于发生了什么的任何想法吗?!!(我知道有人问过类似的问题,但......
  • pyarrow ipc 流 - 如何使用它进行通信?
    阅读pyarrowIPC文档后,我的印象是RecordBatchStreamReader会读取流直到完成(最后的0-s,是通过关闭流编写器写入的)。但是我看到reader很快就停止了,这不是我期望看到的。下面的示例开始在一个进程中写入文件流,并在延迟后开始在另一个进程中读取该文件流。我希望读者能......
  • 如何让电报机器人从电报频道转发消息
    如果正确指定了ID,为什么我的机器人会抱怨ID?importtelebotfromtelebotimporttypesbot=telebot.TeleBot('token')@bot.message_handler(content_types=["rules"])defrules(message):bot.send_message(message.chat.id,message.text)if__name__......
  • 如何在 Open3D 中加载 3D 模型 (.obj)?
    我有一个3D模型(.obj)纹理,可以在其他软件中正确加载:但是使用Open3D,纹理全部显示出来:这是我正在使用的代码:importopen3daso3ddefvisualize(mesh):vis=o3d.visualization.Visualizer()vis.create_window()vis.add_ge......
  • 使用带有超时的模块“子进程”
    以下是运行返回其stdout数据的任意命令或在非零退出代码上引发异常的Python代码:proc=subprocess.Popen(cmd,stderr=subprocess.STDOUT,#Mergestdoutandstderrstdout=subprocess.PIPE,shell=True)communicate用于等待进程退出:......
  • 涨见识了!脱离vue项目竟然也可以使用响应式API
    前言vue3的响应式API大家应该都特别熟悉,比如ref、watch、watchEffect等。平时大家都是在vue-cli或者vite创建的vue项目里面使用的这些响应式API,今天欧阳给大家带来一些不一样的。脱离vue项目,在node.js项目中使用vue的响应式API。关注公众号:【前端欧阳】,给自己一个进阶vue的机会......
  • debian 中使用 telnet 测试服务
    在Debian中使用Telnet命令Telnet是一种基于文本的协议,用于在网络中进行双向交互通信。它通常用于远程登录和测试网络服务。以下是如何在Debian系统上安装和使用Telnet的详细步骤。安装Telnet客户端在Debian系统中,Telnet客户端通常不会预装,因此需要先进行安装。......