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」插件查看数据。
相关推荐
0xDevNull6 小时前
Java反射机制深度解析:从原理到实战
java·开发语言·后端
小小亮016 小时前
Next.js基础
开发语言·前端·javascript
ALex_zry6 小时前
C++网络编程心跳机制与连接保活:长连接稳定性保障
开发语言·网络·c++
Amumu121387 小时前
Js:正则表达式(二)
开发语言·javascript·正则表达式
Sgf2277 小时前
ES8(ES2017)新特性完整指南
开发语言·javascript·ecmascript
IAUTOMOBILE7 小时前
Python 流程控制与函数定义:从调试现场到工程实践
java·前端·python
好大哥呀7 小时前
C++ Web 编程
开发语言·前端·c++
ID_180079054737 小时前
小红书笔记评论 API,Python 调用示例与完整 JSON 返回参考
java·开发语言
南境十里·墨染春水8 小时前
C++ 笔记 友元(面向对象)
开发语言·c++·笔记
TT_44198 小时前
python程序实现图片截图溯源功能
开发语言·python