Sqlite - 常规函数 - TOTAL_CHANGES
在 SQLite 中,total_changes 函数是一个非常实用的内置函数,它主要用于返回自 SQLite 数据库连接打开以来,所有 SQL 语句所导致的数据库表中发生变化的总行数。这些变化包括插入(INSERT)、更新(UPDATE)和删除(DELETE)操作。下面详细介绍其使用方法并给出示例。
基本语法
total_changes()
该函数不需要任何参数,直接调用即可返回自数据库连接建立后,所有 SQL 操作对数据库表造成的总行数变化。
工作原理
当你打开一个 SQLite 数据库连接后,SQLite 会在内部维护一个计数器,用于记录所有 INSERT、UPDATE 和 DELETE 操作所影响的行数。每次执行这些操作时,计数器会相应地增加。调用 total_changes 函数时,它会返回这个计数器的值。
示例
1. 简单的操作及total_changes函数调用
-- 连接到数据库(在命令行或程序中完成)
-- 创建一个示例表
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT
);
-- 插入一条记录
INSERT INTO users (name) VALUES ('Alice');
-- 获取自连接以来的总变化行数
SELECT total_changes();
-- 插入两条记录
INSERT INTO users (name) VALUES ('Bob'), ('Charlie');
-- 再次获取总变化行数
SELECT total_changes();
-- 更新一条记录
UPDATE users SET name = 'David' WHERE id = 1;
-- 又一次获取总变化行数
SELECT total_changes();
-- 删除一条记录
DELETE FROM users WHERE id = 2;
-- 最后获取总变化行数
SELECT total_changes();
解释:
- 首先创建了一个名为 users 的表。
- 第一次插入一条记录后,调用 total_changes 函数,此时返回值为 1,因为插入了一行数据。
- 接着插入两条记录,再次调用 total_changes 函数,返回值变为 3(之前的 1 加上新插入的 2)。
- 执行更新操作,将 id 为 1 的记录的 name 更新为 'David',调用 total_changes 函数,返回值为 4(之前的 3 加上更新的 1 行)。
- 最后删除 id 为 2 的记录,调用 total_changes 函数,返回值为 5(之前的 4 加上删除的 1 行)。
2. 在应用程序中使用total_changes函数
以下是一个使用 Python 的 sqlite3 模块的示例:
import sqlite3
# 连接到数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY,
name TEXT,
price REAL
)
''')
# 插入一条记录
cursor.execute("INSERT INTO products (name, price) VALUES ('Apple', 1.5)")
# 获取总变化行数
total_changes = conn.total_changes
print(f"插入操作后总变化行数: {total_changes}")
# 插入两条记录
cursor.execute("INSERT INTO products (name, price) VALUES ('Banana', 0.5), ('Cherry', 2.0)")
# 再次获取总变化行数
total_changes = conn.total_changes
print(f"再次插入操作后总变化行数: {total_changes}")
# 更新一条记录
cursor.execute("UPDATE products SET price = 1.8 WHERE name = 'Apple'")
# 又一次获取总变化行数
total_changes = conn.total_changes
print(f"更新操作后总变化行数: {total_changes}")
# 删除一条记录
cursor.execute("DELETE FROM products WHERE name = 'Banana'")
# 最后获取总变化行数
total_changes = conn.total_changes
print(f"删除操作后总变化行数: {total_changes}")
# 提交更改并关闭连接
conn.commit()
conn.close()
解释:
- 首先使用 sqlite3.connect 连接到数据库,并创建一个 products 表。
- 每次执行 INSERT、UPDATE 或 DELETE 操作后,通过 conn.total_changes 获取自连接以来的总变化行数,并打印输出。
- 最后提交更改并关闭数据库连接。
注意事项
- total_changes 函数返回的是自数据库连接打开以来的总变化行数,而不是某一个特定 SQL 语句的影响行数。如果需要获取单个 SQL 语句的影响行数,可以使用 changes() 函数。
- 该函数不受事务的影响,即使事务还未提交,total_changes 函数也会记录所有操作的变化行数。
上一篇:SQLite示例数据库