当前位置:首页 > 数据库 > 正文

sqlite数据库怎么连接

使用 Python 的 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()(单条记录)。

sqlite数据库怎么连接  第1张

关闭连接

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))。

0