python入门系列二十(peewee)

1.引言

前面分享了文章:python入门系列十二(操作数据库)。简单演示python如何操作关系数据库,和redis。然后有做java的朋友跑过来问,说方式像jdbc太原始了,python中有没有和java中mybatis类似的框架?

那首先mybatis其实是一个ORM(Object-Relational-Mapping)对象关系映射框架。它通过映射关系,将数据库中的表结构与编程语言中的对象互为转换,简化应用开发中数据库操作,提升开发效率。

这样一来,你在开发中都不用编写sql,只需要对象.方法即完成了业务应用操作数据库开发。效率自然高,不用怀疑!

当然,业界有一种声音说,如果我们追求性能,就不要使用ORM这样的框架了,直接原生sql更好?这么说本身没有什么问题,但不符合最佳实践,使用原生sql应用性能确实要更好,成本代价是牺牲了开发效率,不符合工程化实践原则。事实上,所有宣称不要使用框架的团队,最终都自己封装了一套框架,本质没有区别。

回到主话题,那么今天我给大家分享一个python中轻量级的ORM框架:peewee。官网地址:docs.peewee-orm.com/en/latest/i...

我们看到官方介绍:peewee是一个简单,小巧的orm框架,非常使用学习和使用。

并且官方给出了使用示例:

2.环境准备

遵循惯例,peewee是第三方框架库,使用前,需要安装一下

shell 复制代码
pip install peewee

3.案例

3.1.定义实体

既然是ORM对象关系映射框架,首先需要定义实体类对象,并完成数据库表的初始化

python 复制代码
from peewee import *

# 声明db数据库对象
db = MySQLDatabase("spider", host="127.0.0.1", port=3310, user="root", password="admin")

# 定义实体
class Person(Model):
    name = CharField(max_length=20)
    birthday = DateField()
    class Meta:
        database = db
        table_name = "t_person"

# 数据增删改查
if __name__ == "__main__":
    db.create_tables([Person])

我本地有一个spider库,我使用这个库完成基本演示。代码中重点关注红色框部分:

一是建立目标数据库连接,一是定义实体类对象,并且与数据库连接db关联起来,表名称:t_person。

执行一下代码,看到数据库中已经有t_person表:

你看,这就是框架提升开发效率的好处,直接通过对象完成数据库表的创建。

3.2.增删改查

有了实体对象,和数据库表,来完成完整的增删改查操作吧。

3.2.1.增加数据

python 复制代码
# 添加数据
from datetime import date
person = Person(name="小杨404", birthday=date(1998,7,17))
person.save()
person2 = Person(name="小王", birthday=date(2000,11,12))
person2.save()

3.2.2.查询数据

python 复制代码
# 查询数据(只获取一条) get方法在取不到数据会抛出异常
user = Person.select().where(Person.name == "小杨404").get()
print(user.name, user.birthday)
# query方法
query = Person.select().where(Person.name == "小杨404")
for user in query:
    print(user.name, user.birthday)

3.2.3.修改数据

python 复制代码
# 修改数据
user = Person.get(Person.name == "小杨404")
user.birthday = date(1988, 7, 18)
user.save()

3.2.4.删除数据

python 复制代码
 # 删除数据
Person.delete().where(Person.name == "小王").execute()

3.2.5.示例完整代码

python 复制代码
from peewee import *

# 声明db数据库对象
db = MySQLDatabase("spider", host="127.0.0.1", port=3310, user="root", password="admin")

# 定义实体
class Person(Model):
    name = CharField(max_length=20)
    birthday = DateField()
    class Meta:
        database = db
        table_name = "t_person"

# 数据增删改查
if __name__ == "__main__":
    #db.create_tables([Person])
    # 添加数据
    from datetime import date
    # person = Person(name="小杨404", birthday=date(1998,7,17))
    # person.save()
    # person2 = Person(name="小王", birthday=date(2000,11,12))
    # person2.save()

    # 查询数据(只获取一条) get方法在取不到数据会抛出异常
    # user = Person.select().where(Person.name == "小杨404").get()
    # print(user.name, user.birthday)
    # # query方法
    # query = Person.select().where(Person.name == "小杨404")
    # for user in query:
    #     print(user.name, user.birthday)

    # 修改数据
    # user = Person.get(Person.name == "小杨404")
    # user.birthday = date(1988, 7, 18)
    # user.save()

    # 删除数据
    Person.delete().where(Person.name == "小王").execute()

你看到了,通过peewee这样的ORM框架,在实际应用开发中,极大的提升了我们的开发效率!在业务类应用开发中,值得拥有!

相关推荐
思无邪661 小时前
用 AI 做 JS 逆向:从抓包到复现的完整方法论
开发语言·javascript·人工智能
KeyAction66661 小时前
AI改写战争规则,也在改写商业规则:体系对抗时代已经到来
大数据·人工智能
小蒋观天下1 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
冬奇Lab1 小时前
一天一个开源项目(第231篇):MiniMind —— 花3块钱、2小时,从零训练一个 64M 参数的大语言模型
人工智能·开源·资讯
揽秀亭长2 小时前
视频转脚本有哪些方法?5种方案技术拆解
人工智能·音视频
冬奇Lab2 小时前
LLM 驱动的自动化测试系列(07):移动端自动化(三)——Mobile-Agent-v3 与自研 GUI-Owl 模型路线
android·人工智能·测试
乃嘿仔2 小时前
AI 热点日报 · 2026-10-08
人工智能·chatgpt
Qyr992 小时前
2026年全球二极管模组行业市场规模全景研判:竞争格局与发展趋势全解析
大数据·人工智能
weixin_177297220692 小时前
从零搭建企业AI知识库:系统架构与核心模块拆解
人工智能·系统架构
IT大白鼠2 小时前
DeepSeek Harness 详解开源插件化 AI Agent 运行时:架构、模式、安装与生态
人工智能·架构·开源