sqlite数据库怎么连接
- 数据库
- 2025-08-11
- 50
sqlite3 模块,执行
sqlite3.connect('数据库文件.db') 即可连接 SQLite
SQLite基础认知
SQLite是一款轻量级关系型数据库管理系统(RDBMS),其核心特性包括:
零配置依赖:无需独立服务器进程,直接通过本地文件存储数据;
跨平台兼容:支持Windows/Linux/macOS等主流操作系统;
ACID事务:保证数据操作的原子性、一致性、隔离性和持久性;
标准SQL语法:兼容大部分ANSI SQL规范,学习成本低。
典型应用场景:移动应用本地存储、小型桌面软件数据管理、测试环境快速搭建、嵌入式系统开发等。
主流编程语言连接方案对比表
| 语言 | 核心依赖包 | 连接核心逻辑 | 典型用途 |
|---|---|---|---|
| Python | sqlite3(内置) |
conn = sqlite3.connect('test.db') |
脚本开发、数据分析原型设计 |
| Java | JDBC + sqlite-jdbc |
DriverManager.getConnection("jdbc:sqlite:test.db") |
Android应用、企业级后端服务 |
| C/C++ | SQLite3动态库 |
sqlite3_open("test.db", &db); |
高性能场景、IoT设备开发 |
| .NET(C#) | System.Data.SQLite |
new SQLiteConnection("Data Source=test.db") |
Windows桌面应用、游戏开发 |
| Node.js | better-sqlite3 |
new Database('test.db') |
全栈Web开发、微服务架构 |
分步详解:Python连接SQLite全流程
环境准备
- 无需额外安装:Python标准库已包含
sqlite3模块; - 验证版本:在终端输入
python --version确认Python环境正常。
创建/打开数据库
import sqlite3
# 自动创建数据库文件(若不存在)
conn = sqlite3.connect('my_database.db') # 当前目录下生成db文件
cursor = conn.cursor() # 获取游标对象
️ 关键注意:路径可指定绝对路径(如/data/project/db.sqlite),相对路径基于当前工作目录。
执行SQL语句
# 创建用户表
cursor.execute('''CREATE TABLE IF NOT EXISTS users(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)''')
# 插入测试数据
cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ("张三", "zhangsan@example.com"))
conn.commit() # 必须提交事务才能生效!
参数化查询:使用占位符防止SQL注入,比字符串拼接更安全。
查询与结果处理
# 查询所有用户
cursor.execute("SELECT FROM users")
rows = cursor.fetchall() # 获取全部结果集
for row in rows:
print(f"ID:{row[0]}, Name:{row[1]}, Email:{row[2]}")
# 带条件的查询
cursor.execute("SELECT FROM users WHERE name LIKE ?", ("张%",))
first_result = cursor.fetchone() # 只取第一条记录
游标类型:除fetchall()外,还有fetchmany(size)(分批获取)、fetchone()(单条记录)。

关闭连接
cursor.close() # 先关闭游标 conn.close() # 最后关闭连接
资源释放:未显式关闭可能导致内存泄漏,建议使用with语句自动管理:
with sqlite3.connect('my_database.db') as conn:
cursor = conn.cursor()
# 执行操作...
# 自动提交并关闭连接
其他语言快速示例
Java (JDBC)
import org.sqlite.JDBC;
import java.sql.;
public class Main {
public static void main(String[] args) throws Exception {
Class.forName("org.sqlite.JDBC"); // 注册驱动
Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT FROM users");
while (rs.next()) {
System.out.println(rs.getString("name"));
}
conn.close(); // 关闭连接
}
}
依赖配置:需下载sqlite-jdbc JAR包并加入项目类路径。
Node.js (better-sqlite3)
const db = require('better-sqlite3')('mydb.db');
const stmt = db.prepare('SELECT FROM users WHERE id = ?');
const row = stmt.get(1); // 查询ID=1的记录
console.log(row);
db.close(); // 关闭数据库连接
性能优势:better-sqlite3采用原生C++绑定,比默认的sqlite3模块快5-10倍。
命令行工具直连
进入SQLite交互终端
sqlite3 my_database.db # 打开现有数据库或新建
️ 常用命令:

.tables:查看所有表;.mode column:按列格式输出;.headers on:显示列名;.quit:退出终端。
手动执行SQL
-创建表
CREATE TABLE products(
pid INTEGER PRIMARY KEY,
product_name TEXT,
price REAL
);
-插入数据
INSERT INTO products (product_name, price) VALUES ('手机', 2999.99), ('平板', 1899.5);
-查询结果
SELECT FROM products;
批量操作:可将SQL语句保存为.sql文件,通过sqlite3 db_name < script.sql执行。
常见问题排查指南
Q1: 无法找到数据库文件怎么办?
原因分析:默认在当前工作目录创建,若程序运行目录与预期不符会导致找不到文件;
解决方案:使用绝对路径(如/home/user/data/mydb.db),或通过os.path模块动态拼接路径。
Q2: 并发写入出现锁死怎么办?
原因分析:SQLite默认采用独占式锁,同一时间只允许一个写操作;
解决方案:启用WAL模式(Write-Ahead Logging):
conn = sqlite3.connect('mydb.db', isolation_level=None, uri=True)
conn.execute("PRAGMA journal_mode=WAL") # 开启WAL日志模式
适用场景:高并发读多写少的场景(如Web服务器)。

相关问答FAQs
Q: SQLite适合大型生产环境吗?
A: SQLite更适合中小型应用(百万级以下数据量),对于超大规模数据或高并发场景,建议改用MySQL/PostgreSQL等客户端-服务器架构数据库,但可通过以下优化提升性能:① 合理设置缓存大小(PRAGMA cache_size = N);② 使用事务批量提交;③ 定期执行VACUUM整理碎片。
Q: 如何迁移已有SQLite数据库到其他数据库?
A: 推荐两种方案:① 使用中间件转换(如sqlitebrowser导出CSV,再导入目标数据库);② 编写脚本逐条读取SQLite数据并写入新数据库,注意处理数据类型差异(如SQLite的BOOLEAN在其他数据库中需映射为TINYINT(1))。
