python连接sqlite快速入门

Python 环境自带 SQLite,SQLite是文件型数据库。

一、第一步:检查云服务器上是否有 SQLite

方法 1:用 Python 检查(最快,推荐)

python 复制代码
# 检查Python是否自带sqlite3模块
python3 -c "import sqlite3; print('SQLite已安装,版本:', sqlite3.sqlite_version)"

方法 2:用 Linux 命令行检查

bash 复制代码
# 检查系统是否有sqlite3命令
sqlite3 --version

成功标志:输出版本号(比如3.39.4 2022-09-07 20:51:41 ...)→ 说明系统也安装了 SQLite 命令行工具。

二、核心认知:SQLite vs MySQL

一句话定位 SQLite

SQLite 是「轻量级文件型数据库」,没有服务器进程,整个数据库就是一个.db文件,Python 自带支持,无需安装配置

关键区别对比表

表格

对比项 SQLite MySQL
架构 无服务器,文件型(一个.db 文件就是整个数据库) 有服务器进程(mysqld),客户端 - 服务器架构
安装配置 Python 自带,无需安装,零配置 需要安装 MySQL 服务,配置 my.cnf,启动服务
并发能力 仅支持读并发,写操作会锁整个数据库 支持高并发读写,行级锁,适合多人共用
数据类型 动态类型(列可以存任意类型,比如 INT 列存字符串也可以) 静态类型(列必须严格匹配定义的类型)
适用场景 嵌入式设备、小型应用、本地缓存、测试开发 大型 Web 应用、企业级系统、高并发场景
Python 支持 标准库sqlite3,直接用 需安装第三方库(pymysql/mysql-connector)

最核心的 2 个区别

文件型 vs 服务器型:

SQLite:整个数据库就是一个test.db文件,你可以把这个文件拷贝到任何电脑上用,无需启动服务;

MySQL:需要启动mysqld服务,通过 IP / 端口连接,数据存在服务器的数据目录里。
动态类型 vs 静态类型:

SQLite:你定义age INT列,存'28'(字符串)也可以,SQLite 会自动转换;SQLite 会自动把字符串 '28' 转换成整数 28 存储。只有纯数字字符串 会被转换,非数字字符串原样存储。这是 SQLite 类型亲和性的特性,是它和其他数据库最大的区别之一。转换后可以正常做数值计算、筛选,完全安全。

MySQL:定义age INT列,存字符串会报错。

三、1 小时搞定「SQLite 核心 5 步 + 增删改查」

SQLite 的 Python 操作和 pymysql90% 语法一致,你可以直接复用 MySQL 的逻辑,只是更简单(无需连接 IP / 端口 / 用户名密码)。

前置:SQLite 支持的数据类型

SQLite 是动态类型,只有5 种基本类型 ,但实际使用时你可以像 MySQL 一样写INT/VARCHAR,SQLite 会自动映射:

表格

SQLite 基本类型 对应 MySQL 类型 说明
NULL NULL 空值
INTEGER INT/BIGINT 整数
REAL FLOAT/DOUBLE 浮点数
TEXT VARCHAR/TEXT 字符串
BLOB BLOB 二进制数据(比如图片)

你可以直接用 MySQL 的类型名建表(比如VARCHAR(50)),SQLite 会自动兼容,不用改习惯。

四、从建库到增删改查全流程附代码

python 复制代码
import sqlite3

def main():
    # 1. 连接/创建数据库
    conn = sqlite3.connect("test.db")
    cursor = conn.cursor()
    print("连接成功!")

    try:
        # 2. 建表
        sql_create = """
        CREATE TABLE IF NOT EXISTS employee (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            age INTEGER,
            department TEXT,
            salary REAL
        )
        """
        cursor.execute(sql_create)
        conn.commit()

        # 单条插入(参数化查询,和pymysql一样,只是占位符是?不是%s!)
        sql = "INSERT INTO employee (name, age, department, salary) VALUES (?, ?, ?, ?)"
        params = ("张三", 28, "销售一部", 15000.00)
        cursor.execute(sql, params)
        conn.commit()
        print(f"插入成功,ID:{cursor.lastrowid}")  -- SQLite可以直接获取自增ID

        # 批量插入(executemany,和pymysql一样)
        sql = "INSERT INTO employee (name, age, department, salary) VALUES (?, ?, ?, ?)"
        params_list = [
            ("李四", 30, "销售二部", 18000.00),
            ("王五", 25, "技术部", 20000.00)
        ]
        cursor.executemany(sql, params_list)
        conn.commit()
        print(f"批量插入成功,影响行数:{cursor.rowcount}")
        
       # 查询所有
        cursor.execute("SELECT * FROM employee")
        results = cursor.fetchall()
        print("所有员工:")
        for row in results:
            print(f"ID: {row[0]}, 姓名: {row[1]}, 年龄: {row[2]}, 部门: {row[3]}, 薪资: {row[4]}")

        # 查询单条
        cursor.execute("SELECT * FROM employee WHERE id = ?", (1,))
        row = cursor.fetchone()
        print(f"\nID为1的员工:{row}")

        # 5. 更新
        cursor.execute("UPDATE employee SET salary = ? WHERE name = ?", (16000.00, "张三"))
        conn.commit()
        print(f"\n更新成功,影响行数:{cursor.rowcount}")
        
        #删除数据
        sql = "DELETE FROM employee WHERE id = ?"
        params = (3,)
        cursor.execute(sql, params)
        conn.commit()
        print(f"删除成功,影响行数:{cursor.rowcount}")

    except Exception as e:
        conn.rollback()
        print(f"出错:{e}")
    finally:
        # 6. 关闭资源
        if 'cursor' in locals():
            cursor.close()
        if 'conn' in locals():
            conn.close()
        print("\n连接已关闭")

if __name__ == "__main__":
    main()

五、云 Linux 服务器上的额外操作

  1. 用命令行直接操作 SQLite
bash 复制代码
# 进入test.db数据库(如果不存在会自动创建)
sqlite3 test.db

# SQLite命令行里的操作(以.开头的是SQLite命令,不是SQL)
.tables → 查表名
.schema 表名 → 查表结构
.headers on → 显示列名
.mode column → 格式化输出
.dump → 导出库
.import → 导入数据
.read → 执行 SQL 脚本
.backup → 备份库
.databases → 查库信息
.quit/.exit → 退出

六、快速掌握的核心技巧

  1. 「复用 MySQL 基础」 :SQLite 的 Python 操作和 pymysql90% 一样,只是占位符是?、自增主键是AUTOINCREMENT、无需连接参数;
  2. 「聚焦核心区别」:重点记住「文件型、动态类型、无服务器」这 3 个核心区别,其他和 MySQL 一样;
  3. 「先跑通再改」:先复制完整实战代码,在阿里云服务器上跑通,再修改 SQL 语句练不同操作;
  4. 「不用记数据类型」:SQLite 是动态类型,直接用 MySQL 的类型名建表就行,SQLite 会自动兼容。
  5. SQLite 是「文件型数据库」,没有服务器进程,不能像 MySQL 那样通过 IP / 端口直接远程连接。可以把test.db 下载到本地,PyCharm 直接操作本地文件,在 PyCharm 里安装「Database Navigator」插件查看数据。
相关推荐
m0_547722922 小时前
乒乓球比赛管理系统
python·mysql
小二·2 小时前
Go 语言系统编程与云原生开发实战(第36篇)
开发语言·云原生·golang
王夏奇2 小时前
python-PyQt6库学习
开发语言·python·学习
不会写DN2 小时前
Go中的Tcp编程为什么总是能看到handle?
开发语言·网络·后端·tcp/ip·golang
飞Link2 小时前
进阶时序建模:门控递归单元 (GRU) 深度解析与实战
开发语言·人工智能·rnn·深度学习·gru
Westward-sun.2 小时前
【Python+PyTorch】从零实现食物识别:自动生成标注 + CNN 训练全流程
pytorch·python·cnn
格林威2 小时前
工业相机图像高速存储(C++版):先存内存,后批量转存方法,附海康相机实战代码!
开发语言·c++·人工智能·数码相机·计算机视觉·工业相机·堡盟相机
蓝净云2 小时前
python包管理工具uv
python·uv
啊阿狸不会拉杆2 小时前
《计算机视觉:模型、学习和推理》第 19 章-时序模型
人工智能·python·学习·机器学习·计算机视觉·时序模型