SQLite 数据库 批量插入案例 BULK INSERT CASE

SQLite 数据库阿木 发布于 11 天前 5 次阅读


SQLite 数据库批量插入案例详解

在处理大量数据时,数据库的批量插入操作是提高效率的关键。SQLite 作为一款轻量级的数据库,广泛应用于嵌入式系统和移动应用中。本文将围绕 SQLite 数据库的批量插入操作,详细介绍其原理、方法以及在实际应用中的案例。

SQLite 简介

SQLite 是一个开源的嵌入式数据库,它支持标准的 SQL 语法,并且具有以下特点:

- 轻量级:SQLite 的核心库仅包含一个单文件,大小约为 1MB。

- 自我维护:SQLite 数据库文件无需额外的维护工具。

- 跨平台:SQLite 支持多种操作系统,包括 Windows、Linux、macOS 和 Android。

- 高效:SQLite 在处理大量数据时表现出色。

批量插入原理

批量插入是指一次性将多条记录插入到数据库中,而不是逐条插入。这样做可以减少磁盘I/O操作,提高数据插入效率。

SQLite 支持以下几种批量插入方法:

1. 使用事务(Transaction)进行批量插入。

2. 使用 `executemany()` 方法进行批量插入。

3. 使用 `executescript()` 方法执行包含多条 SQL 语句的脚本。

方法一:使用事务进行批量插入

使用事务进行批量插入是提高效率的一种常用方法。以下是使用事务进行批量插入的步骤:

1. 开始一个事务。

2. 执行多条插入语句。

3. 提交事务。

以下是一个使用 Python 和 SQLite 进行批量插入的示例代码:

python

import sqlite3

连接到 SQLite 数据库


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


cursor = conn.cursor()

创建一个表


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

开始一个事务


conn.execute('BEGIN TRANSACTION;')

执行多条插入语句


cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 25))


cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Bob', 30))


cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Charlie', 35))

提交事务


conn.commit()

关闭连接


cursor.close()


conn.close()


方法二:使用 `executemany()` 方法进行批量插入

`executemany()` 方法是 Python 标准库 sqlite3 提供的一个用于批量插入的方法。以下是一个使用 `executemany()` 方法进行批量插入的示例代码:

python

import sqlite3

连接到 SQLite 数据库


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


cursor = conn.cursor()

创建一个表


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

准备批量插入的数据


data = [


('Alice', 25),


('Bob', 30),


('Charlie', 35)


]

执行批量插入


cursor.executemany('INSERT INTO users (name, age) VALUES (?, ?)', data)

提交事务


conn.commit()

关闭连接


cursor.close()


conn.close()


方法三:使用 `executescript()` 方法执行脚本

`executescript()` 方法可以执行包含多条 SQL 语句的脚本,从而实现批量插入。以下是一个使用 `executescript()` 方法进行批量插入的示例代码:

python

import sqlite3

连接到 SQLite 数据库


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


cursor = conn.cursor()

创建一个表


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

执行包含多条插入语句的脚本


script = '''


BEGIN TRANSACTION;


INSERT INTO users (name, age) VALUES ('Alice', 25);


INSERT INTO users (name, age) VALUES ('Bob', 30);


INSERT INTO users (name, age) VALUES ('Charlie', 35);


COMMIT;


'''

cursor.executescript(script)

关闭连接


cursor.close()


conn.close()


实际应用案例

在实际应用中,批量插入操作常用于以下场景:

1. 数据迁移:将大量数据从其他数据库迁移到 SQLite。

2. 数据同步:将本地数据与远程服务器数据进行同步。

3. 数据生成:生成大量测试数据用于测试。

以下是一个使用批量插入进行数据迁移的示例:

python

import sqlite3

连接到源数据库


source_conn = sqlite3.connect('source.db')


source_cursor = source_conn.cursor()

连接到目标数据库


target_conn = sqlite3.connect('target.db')


target_cursor = target_conn.cursor()

创建一个表


target_cursor.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)')

执行批量插入


source_cursor.execute('SELECT id, name, age FROM users')


rows = source_cursor.fetchall()

target_cursor.executemany('INSERT INTO users (id, name, age) VALUES (?, ?, ?)', rows)

提交事务


target_conn.commit()

关闭连接


source_cursor.close()


source_conn.close()


target_cursor.close()


target_conn.close()


总结

本文详细介绍了 SQLite 数据库的批量插入操作,包括原理、方法和实际应用案例。通过使用事务、`executemany()` 和 `executescript()` 方法,可以有效地提高数据插入效率。在实际应用中,批量插入操作在数据迁移、数据同步和数据生成等方面发挥着重要作用。