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」插件查看数据。
相关推荐
前端若水7 小时前
智能体开发与传统软件开发的核心区别
网络·人工智能·python·开源·log4j
duke8692672147 小时前
C#怎么获取U盘的插拔事件_C#如何重写WndProc捕获消息【进阶】
jvm·数据库·python
m0_690825827 小时前
如何高效实现多用户通知系统而不造成数据库冗余
jvm·数据库·python
ch.ju7 小时前
Java Programming Chapter 3——Default value of array
java·开发语言
2301_812539677 小时前
golang如何使用Fiber高性能框架_golang Fiber框架入门教程
jvm·数据库·python
aini_lovee7 小时前
STM32 上实现 SD 卡读取 JPEG 解码 TFT 显示
开发语言·stm32
2401_880071407 小时前
html标签如何提升可访问性_aria-label与title区别【指南】
jvm·数据库·python
谙弆悕博士7 小时前
【附C语言源码】C语言 栈结构 实现及其扩展操作
c语言·开发语言·数据结构·算法·链表·指针·
njsgcs7 小时前
c# solidworks GetPartBox无法获得正确实体边界框原因
开发语言·c#·solidworks
2401_850491657 小时前
如何管理多个监听器_listener.ora中非默认端口配置实战
jvm·数据库·python