访问数据库

现代数据存储与数据库技术入门

当我们开发一个应用时,程序运行产生的数据会临时存在内存里——但一旦程序退出、设备重启,这些信息就会“灰飞烟灭”。想要真正“留住”数据,就得用到数据持久化技术,而数据库是其中最通用、功能最强的方案。


1. 从简单到专业:数据持久化的演变

先从入门级的文件存储说起,逐步理解为什么我们最终会选择数据库。

1.1 文本文件:人人都能写的基础方案

最简单的持久化方式,就是把数据写成纯文本保存。其中最常用的是CSV(逗号分隔值)格式:

name,score
Michael,99
Bob,85
Bart,59
Lisa,87

优点

  • ✅ 完全人类可读,用记事本就能打开编辑
  • ✅ 格式简单,几乎所有编程语言有原生或第三方库支持
  • ✅ 导出导入门槛极低,Excel也能直接打开

缺点

  • ❌ 没有统一标准:比如有的用分号、有的用制表符做分隔,不同编码会乱码
  • ❌ 查询效率差:要统计“80分以上的人数”,得遍历整个文件
  • ❌ 不支持复杂数据:嵌套、关联的数据根本没法存

1.2 JSON文件:结构化但非专业级的选择

JSON是Web开发的“通用语言”,也能用来存结构化数据:

[
  {"name":"Michael","score":99},
  {"name":"Bob","score":85},
  {"name":"Bart","score":59},
  {"name":"Lisa","score":87}
]

优点

  • ✅ 支持嵌套、键值对这类更灵活的结构
  • ✅ Web前端/后端无缝对接
  • ✅ 文档清晰

缺点

  • ❌ 存储冗余大:每一条数据都要重复写键名
  • ❌ 大数据集慢:没有索引,查询还是要全量遍历
  • ❌ 修改风险高:不小心删了个逗号,整个文件就废了

1.3 二进制格式:高效但“黑盒”的现代工具

如果只关心存储效率、不关心人类可读性,二进制格式是更好的选择:

  • Protocol Buffers(Protobuf):Google开发,体积小、解析快,跨语言支持好
  • MessagePack:类似JSON但压缩率更高、速度更快
  • Avro:Apache出品,支持动态数据类型,适合大数据场景

2. 数据库系统的核心与发展

当数据量变大、需要频繁查询或保证“数据不能错漏”时,文件存储的局限性会完全暴露——这时候数据库系统就登场了。

2.1 数据库发展简史(极简版)

  1. 1950s-1960s:文件系统(只能按顺序读写)
  2. 1960s-1970s:层次/网状数据库(IBM主导,结构太固定)
  3. 1970s关系数据库诞生(基于Edgar F. Codd的关系模型,彻底改变格局)
  4. 2000sNoSQL运动兴起(应对Web2.0时代的非结构化、高并发数据)
  5. 2010s至今NewSQL、云原生数据库爆发(结合SQL和NoSQL的优点)

2.2 关系数据库:最经典的数据库类型

关系数据库的核心是“表”,表和表之间可以通过“键”关联——就像Excel的不同工作表,但功能强大得多。

举个简单的学校管理系统例子:

Grade表(年级)Class表(班级)
grade_idnameclass_id
1一年级11
2二年级12
3三年级21

如果想查“一年级所有班级”,只需要写一条SQL(结构化查询语言)就行:

SELECT * FROM Class WHERE grade_id = 1;

3. 现代数据库怎么选?

现在的数据库品类繁多,我们可以按“模型”分为三大类:

3.1 关系型数据库(SQL):事务安全的首选

主流选择

类型代表数据库适用场景
商业Oracle、SQL Server、DB2银行、电商核心系统等对稳定性、功能要求极高的场景
开源MySQL/MariaDB最主流的Web应用数据库,WordPress、淘宝早期都在用
开源PostgreSQL功能最强的开源关系库,支持JSON、GIS、窗口函数,适合复杂业务和数据分析
嵌入式SQLite零配置、单文件,适合移动应用、桌面工具、小程序原型

3.2 NoSQL数据库:非结构化/高并发的救星

NoSQL不是“否定SQL”,而是“Not Only SQL”——它不要求表结构固定,能轻松处理非结构化数据。

主流NoSQL类型

类型代表核心特点适用场景
文档数据库MongoDB、CouchDB存JSON-like的文档,结构灵活社交动态、电商商品、日志系统
键值存储Redis、DynamoDB像字典一样存数据,读写极快缓存、会话、排行榜、秒杀
宽列存储Cassandra、HBase横向扩展性强,支持海量数据物联网、时间序列数据、用户行为分析
图数据库Neo4j、ArangoDB存节点和关系,擅长处理关联查询社交网络、知识图谱、推荐系统

3.3 NewSQL数据库:鱼和熊掌可以兼得?

NewSQL结合了SQL的事务安全、复杂查询和NoSQL的横向扩展、高并发能力,适合云原生、分布式场景:

  • TiDB:国内PingCAP出品,完全兼容MySQL
  • CockroachDB:国外流行的分布式SQL,支持跨区域部署
  • YugabyteDB:兼容PostgreSQL,开源免费

4. Python怎么连接数据库?

Python是数据分析、Web开发的常用语言,连接数据库也非常简单——这里给大家列几个主流库ORM推荐

4.1 原生数据库驱动

如果追求效率、或者需要写复杂SQL,可以用原生驱动:

# SQLite:Python3自带,无需安装
import sqlite3
conn = sqlite3.connect('school.db')  # 单文件模式
# conn = sqlite3.connect(':memory:')  # 内存模式(重启失效)

# MySQL/MariaDB:需要pip install pymysql
import pymysql
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='your_password',
    db='school'
)

# PostgreSQL:需要pip install psycopg2-binary
import psycopg2
conn = psycopg2.connect(
    dbname='school',
    user='postgres',
    password='your_password',
    host='localhost'
)

# MongoDB:需要pip install pymongo
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client.school  # 选择数据库

4.2 ORM(对象关系映射):写代码更优雅

ORM可以让我们用Python类和对象操作数据库,不用手写太多SQL:

  • SQLAlchemy:功能最全面的Python SQL工具包,支持多数据库
  • Django ORM:Django框架内置,适合快速开发Web应用
  • Peewee:轻量级ORM,代码简洁,适合小型项目
  • MongoEngine:MongoDB的ODM(对象文档映射)

5. 最后给新手的学习建议

扎实的基础永远是最重要的:

  1. 入门阶段:先学SQL和关系数据库(推荐用SQLite或MySQL练手),掌握建表、增删改查、基础关联
  2. 进阶阶段:学数据库设计(范式、索引)、事务和并发控制
  3. 按需扩展:根据项目需求学NoSQL、云原生数据库

💡 提示:AI驱动的向量数据库、物联网用的时序数据库是2023年以后的热门方向,但建议先把基础打牢再碰~