sqlite数据库怎么连接
- 数据库
- 2025-08-11
- 3
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)
)。