你知道 Python 其实自带了小型数据库吗
很多人不知道,其实 Python 标准库里就自带了一个小型数据库 —— SQLite,而且完全开箱即用,不用额外安装任何依赖。你装好 Python,就已经自带 sqlite3 模块了。
Python 自带的 SQLite 是啥?
SQLite 跟 MySQL、PostgreSQL 这些“大型”数据库不一样,它是一个轻量级的嵌入式数据库。什么意思呢?就是它不需要单独的数据库服务进程,所有数据就存放在一个文件里,用起来像读写普通文件一样方便。
举个例子,你写个脚本,想保存一些用户的偏好设置,或者爬虫的数据,不想折腾 MySQL 那些配置,SQLite 就非常合适。它支持 SQL 语法,该有的表、索引、事务也都有。
直接上代码,几行就能把数据库跑起来:
import sqlite3
# 连接数据库(如果没有就会自动创建 test.db 文件)
conn = sqlite3.connect("test.db")
cursor = conn.cursor()
# 创建一张表
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
""")
# 插入一条数据
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 25))
# 查询数据
cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
print(row)
# 提交事务并关闭
conn.commit()
conn.close()
运行完你会在目录下看到一个 test.db 文件,里面就是完整的数据库,拿到别的机器上一样能用。
SQLite 的优势和局限
它的优势很明显:零配置、跨平台、占用小、支持事务,单个数据库文件拷贝就能迁移。但它也有局限,比如并发写入不太行(因为是文件锁),数据量特别大时性能也不如专业数据库。
所以,SQLite 更适合小型项目、桌面应用、本地缓存,甚至原型开发。等业务真的发展起来,再切换到 MySQL、PostgreSQL 都不晚。
再来个稍微复杂点的用法
很多人不知道 SQLite 还支持一些比较高级的特性,比如内存数据库。就是直接把数据库建在内存里,用完就销毁,非常适合做临时计算。
# 内存数据库
conn = sqlite3.connect(":memory:")
cursor = conn.cursor()
cursor.execute("CREATE TABLE numbers (num INTEGER)")
cursor.executemany("INSERT INTO numbers (num) VALUES (?)", [(i,) for i in range(5)])
cursor.execute("SELECT SUM(num) FROM numbers")
print(cursor.fetchone()[0]) # 输出 0+1+2+3+4=10
这个数据库不会写到硬盘,脚本一结束,数据就没了,但运行速度非常快。
所以说,Python 自带的这个小型数据库其实非常实用。很多时候你以为要上 MySQL 的场景,SQLite 就能轻松搞定。等哪天你写个脚本需要存点小数据,别急着找外部依赖,先看看 sqlite3 就够用了。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领