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 服务器上的额外操作
- 用命令行直接操作 SQLite
bash
# 进入test.db数据库(如果不存在会自动创建)
sqlite3 test.db
# SQLite命令行里的操作(以.开头的是SQLite命令,不是SQL)
.tables → 查表名
.schema 表名 → 查表结构
.headers on → 显示列名
.mode column → 格式化输出
.dump → 导出库
.import → 导入数据
.read → 执行 SQL 脚本
.backup → 备份库
.databases → 查库信息
.quit/.exit → 退出
六、快速掌握的核心技巧
- 「复用 MySQL 基础」 :SQLite 的 Python 操作和 pymysql90% 一样,只是占位符是
?、自增主键是AUTOINCREMENT、无需连接参数; - 「聚焦核心区别」:重点记住「文件型、动态类型、无服务器」这 3 个核心区别,其他和 MySQL 一样;
- 「先跑通再改」:先复制完整实战代码,在阿里云服务器上跑通,再修改 SQL 语句练不同操作;
- 「不用记数据类型」:SQLite 是动态类型,直接用 MySQL 的类型名建表就行,SQLite 会自动兼容。
- SQLite 是「文件型数据库」,没有服务器进程,不能像 MySQL 那样通过 IP / 端口直接远程连接。可以把test.db 下载到本地,PyCharm 直接操作本地文件,在 PyCharm 里安装「Database Navigator」插件查看数据。