Chapter 14:SQLite + SQLAlchemy
数据需要家,而数据库就是它的归宿。本章将带你从最基础的 SQL 开始,逐步掌握 ORM、模型定义、增删改查、事务等关键能力。你会学会如何让数据持久化、结构化、可查询,并为后续的大项目打下坚实基础。
“数据需要家,而数据库就是它的归宿。”
大家好!我是你的 Win7 + Python 3.8 专属导师。从第1篇开始,我们一步步用 Flask 搭起了知识库应用,前面的章节里知识库还是靠内存列表或 JSON 文件存储,刷新页面就没了。现在,第14篇正式引入数据库,让数据真正持久化、支持搜索、分页,还能轻松扩展。
本篇完全针对Win7 系统 + Python 3.8环境编写,所有命令、代码、坑点都已亲自在 Win7 上验证通过,零配置、零服务器,读完直接复制就能跑!
1. SQLite:零配置,Win7 自带完美兼容
SQLite 是世界上最流行的嵌入式数据库,完全不需要安装任何服务器,就是一个.db文件。
为什么选它?
- Python 3.8 标准库自带
sqlite3模块(Win7 自带,无需任何额外下载)。 - 单文件存储,复制粘贴就能备份/迁移。
- 适合我们的知识库场景(数据量不会太大)。
- Win7 上运行零问题,无需管理员权限。
验证一下(Win7 命令提示符):
python -c "import sqlite3; print(sqlite3.sqlite_version)"输出类似3.31.1就说明一切正常。
2. SQLAlchemy ORM 入门:不再手写 SQL
SQLAlchemy 是 Python 最强大的 ORM(对象关系映射)框架。
核心思想:把数据库表映射成 Python 类,增删改查全用对象操作,告别手写 SQL。
我们用Flask-SQLAlchemy扩展(专门为 Flask 优化),安装命令(Win7 Python 3.8):
pip install flask-sqlalchemy==3.0.5 sqlalchemy==2.0.23 alembic==1.12.0(版本已锁定兼容 Python 3.8 和 Win7,避免新版本可能的兼容性问题)
3. 模型定义、增删改查、迁移
项目结构(延续之前章节)
app/ ├── config.py ├── models.py # 新增 ├── routes/ │ └── knowledge.py # 知识库路由 ├── services/ │ └── knowledge_service.py └── app.pymodels.py(完整代码,直接复制):
fromflask_sqlalchemyimportSQLAlchemyfromdatetimeimportdatetime db=SQLAlchemy()classKnowledge(db.Model):__tablename__='knowledge'id=db.Column(db.Integer,primary_key=True)title=db.Column(db.String(200),nullable=False,index=True)content=db.Column(db.Text,nullable=False)created_at=db.Column(db.DateTime,default=datetime.utcnow,index=True)updated_at=db.Column(db.DateTime,default=datetime.utcnow,onupdate=datetime.utcnow)def__repr__(self):