awesome-python3-webapp数据库ORM详解:手把手教你编写模型层

发布时间:2026/8/23 16:02:06
awesome-python3-webapp数据库ORM详解:手把手教你编写模型层 awesome-python3-webapp数据库ORM详解手把手教你编写模型层【免费下载链接】awesome-python3-webapp小白的Python入门教程实战篇项目地址: https://gitcode.com/gh_mirrors/aw/awesome-python3-webappawesome-python3-webapp 是小白Python入门教程的实战源码一个完整的博客网站 iOS App。本文带你详解这个项目的数据库 ORM 设计手把手教你编写模型层——读懂这两百来行代码你就能看懂绝大多数 Web 项目的数据访问层。什么是数据库 ORM为什么需要它ORMObject-Relational Mapping对象关系映射是一种把数据库表里的记录翻译成Python 对象属性的技术核心好处是写代码不写 SQL。不用 ORM 时添加一条用户记录要手写字符串INSERT INTO users (id, email, name) VALUES (123, ab.com, Tom)用了 ORM只需要user User(id123, emailab.com, nameTom) yield from user.save()对比项手写 SQL使用数据库 ORM可读性SQL 字符串混杂在业务代码里Python 对象直观好懂维护成本改表结构要到处改 SQL只改一处模型定义出错概率字段名拼错、漏写列字段自动映射少踩坑 这个项目没有引入重量级 ORM 库而是基于 aiomysql 手写了一个轻量级 ORM见www/orm.py对想搞懂 ORM 原理的初学者来说非常友好。一键克隆快速获取实战项目执行以下命令即可下载完整项目git clone https://gitcode.com/gh_mirrors/aw/awesome-python3-webapp 项目结构提示顶层是README.md目录说明和LICENSE每日实战源码在day-01到day-16分支中执行git checkout day-16可切换到最完整的版本模型层相关代码集中在www/models.py和www/orm.py两个文件第一步设计数据库表——从 users 表到 blogs 表项目是一个博客网站只用了 3 张表users用户、blogs文章、comments评论。以 users 表为例结构如下CREATE TABLE users ( id varchar(50) PRIMARY KEY, email varchar(50), passwd varchar(50), admin boolean, name varchar(50), image varchar(500), created_at real );blogs表记录文章标题、摘要、正文和作者信息comments表记录文章 ID、评论人和正文。 关键设计主键id不是自增整数而是毫秒时间戳 UUID生成的字符串可避免多机器部署时的 ID 冲突也是大厂常用的分布式 ID 思路。第二步三行代码定义模型——模型层的核心打开www/models.py每张表对应一个类例如class User(Model): __table__ users id StringField(primary_keyTrue, defaultnext_id, ddlvarchar(50)) email StringField(ddlvarchar(50)) name StringField(ddlvarchar(50)) created_at FloatField(defaulttime.time)看懂这个模型只需 3 个规则__table__指定数据库表名例如User类对应users表类属性即字段StringField字符串、IntegerField整数、FloatField浮点数、BooleanField布尔、TextField长文本ddl参数指定数据库列类型primary_keyTrue标记主键default指定默认值还可以传函数如next_id每次调用都生成新 ID按同样的写法User、Blog、Comment 三个模型就定义完了字段与表列一一对应模型属性表列类型说明ididvarchar(50)主键emailemailvarchar(50)邮箱created_atcreated_atreal创建时间戳ORM 的秘密用元类自动生成 SQL项目在www/orm.py中最巧妙的部分是元类ModelMetaclass。每当 Python 创建一个模型类时它会自动扫描所有Field属性并生成 4 套 SQL 模板模板生成的 SQL以 User 为例__select__SELECT id, email, ... FROM users__insert__INSERT INTO users (email, ..., id) VALUES (?, ...)__update__UPDATE users SET email? ... WHERE id?__delete__DELETE FROM users WHERE id?从此你的模型对象就自带 SQL了增删改查只剩下几个方法调用。初学者不必深究元类细节只需记住一句话字段定义在类里SQL 由框架生成。四个方法搞定增删改查ORM 日常用法Model基类自带了实战所需的全部方法方法用途一行示例find(pk)按主键查一条user yield from User.find(1616...)findAll(...)按条件查多条支持排序、分页blogs yield from Blog.findAll(orderBycreated_at desc, limit10)findNumber(...)聚合统计如数评论数count yield from Comment.findNumber(count(id), whereblog_id?, args[id])save()插入或更新一条记录yield from blog.save()再看www/handlers.py里的真实业务代码——用户点击发表文章时只需要两步blog Blog(user_iduser.id, namename, summarysummary, contentcontent) yield from blog.save()这就是模型层的魅力业务代码只面对对象不面对 SQL。避坑指南模型层 5 个最佳实践别忘了主键每个模型必须有primary_keyTrue的字段否则元类会直接抛错ddl类型要匹配内容邮箱、姓名用varchar(50)文章正文用TextField列类型选对能省不少空间密码绝不存明文项目把密码做散列转换后再入库登录时同样比较散列值关联数据适度冗余Blog表里额外存了user_name、user_image展示时无需联表查询是典型的以空间换时间时间戳交给 defaultcreated_at FloatField(defaulttime.time)会自动填入当前时间业务代码无需关心总结数据库 ORM 是 Web 开发的地基。这个实战项目把 ORM 拆解成了两个文件www/orm.py框架实现和www/models.py模型定义建议按下面的路径学习先读www/models.py中的User模型理解字段类型与主键设计再看www/orm.py的find、findAll、save明白 SQL 如何被自动拼出最后翻www/handlers.py看模型在真实业务里如何被调用走完这三步你自己动手编写数据库 ORM 模型层就再也不是难事。【免费下载链接】awesome-python3-webapp小白的Python入门教程实战篇项目地址: https://gitcode.com/gh_mirrors/aw/awesome-python3-webapp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考