Python简洁强大的ORM框架Peewee的用法详解

 更新时间:2025年01月16日 08:22:53   作者:wang_yb  
这篇文章主要为大家详细介绍了Peewee,它作为一款简洁且功能强大的 ORM(对象关系映射)框架,为开发者提供了高效便捷的数据库交互方式,下面我们来看看它的具体使用吧

在 Python 的开发世界中,数据库操作是至关重要的一环。

今天介绍的 Peewee 作为一款简洁且功能强大的 ORM(对象关系映射)框架,为开发者提供了高效便捷的数据库交互方式。

1. Peewee概述

Peewee 是一个简单小巧的 ORM,它的概念简洁明了,易于学习和使用。

能够与 SQLiteMySQLMariaDBPostgreSQL 等多种数据库协同工作,拥有丰富的扩展功能,其源代码托管于 GitHub-peewee

使用过Python的都知道,SQLAlchemy几乎已经是Python中的标准ORM框架了,功能强大,

为什么还要使用Peewee呢?

首先,Peewee 设计更为简洁,其 API 简单直观,学习曲线平缓,新手能快速上手,而 SQLAlchemy 相对复杂,需要花费更多时间去掌握。

其次,Peewee 代码量较少,在一些简单项目中,其轻量级的特点能使项目结构更清晰,开发效率更高。

例如在小型数据库应用场景下,Peewee 能快速搭建起数据操作模块。

再者,Peewee 的性能在特定场景下表现出色,如对 SQLite 数据库的操作,其资源占用相对较低,能为应用带来更好的运行效果。

总之,如果项目规模不大,或者做一些小工具,那么Peewee 会更加趁手。

2. 快速上手

2.1. 初始化数据库

针对不同的数据库类型,有相应的初始化方式。

下面我们选择使用SQLite

from peewee import SqliteDatabase

db = SqliteDatabase('my_database.db')

2.2. 模型定义

在 Peewee 中,通过定义类来创建模型,类的属性对应数据库表中的字段。例如:

from peewee import Model, CharField, IntegerField

class User(Model):
    class Meta:
        database = db

    username = CharField(unique=True)
    age = IntegerField()

2.3. 创建数据库和表

连接数据库,然后就可通过SqliteDatabase来创建表。

if __name__ == "__main__":
    db.connect()
    db.create_tables([User])

执行之后,就会发现创建了sqlite数据库和表。

$  sqlite3.exe .\my_database.db
SQLite version 3.45.3 2024-04-15 13:34:05 (UTF-16 console I/O)
Enter ".help" for usage hints.
sqlite> .tables
user

db.create_tables反复执行也没关系,如果表已经存在,不会重复创建。

2.4. 数据存储与检索

存储数据时,先创建模型实例并赋值,然后调用 save 方法即可将数据保存到数据库。

if __name__ == "__main__":
    user = User(username="Harry", age=23)
    user.save()

运行之后,查询数据库,发现数据已经写入了数据库。

sqlite> select * from user;
┌────┬──────────┬─────┐
│ id │ username │ age │
├────┼──────────┼─────┤
│ 1  │ Harry    │ 23  │
└────┴──────────┴─────┘

检索数据可以使用各种查询方法。如获取单个记录:

user = User.get(User.username == "Harry")
print(f"name: {user.username}, age: {user.age}")

# 运行结果:
# name: Harry, age: 23

2.5. 更新记录

更新记录,比如将上面的年龄改为30。

User.update(age=30).where(User.username == 'Harry').execute()

运行之后:

sqlite> select * from user;
┌────┬──────────┬─────┐
│ id │ username │ age │
├────┼──────────┼─────┤
│ 1  │ Harry    │ 30  │
└────┴──────────┴─────┘

2.6. 删除记录

删除记录也很简单:

User.delete().where(User.username == 'Harry').execute()

运行之后:

sqlite> select * from user;
sqlite> select count(1) from user;
┌──────────┐
│ count(1) │
├──────────┤
│ 0        │
└──────────┘

3. 高级查询功能

高级的查询功能包括多条件过滤,排序以及分页查询等等。

3.1. 批量插入数据

为了演示高级查询功能,先批量插入一批数据。

User.insert_many(users, fields=[User.username, User.age]).execute()

运行结果:

sqlite> select * from user;
┌────┬──────────┬─────┐
│ id │ username │ age │
├────┼──────────┼─────┤
│ 1  │ harry    │ 23  │
│ 2  │ lily     │ 20  │
│ 3  │ tom      │ 35  │
│ 4  │ jerry    │ 12  │
│ 5  │ kate     │ 42  │
└────┴──────────┴─────┘

3.2. 多条件查询

多个条件的交集,比如id>2并且age>30的数据:

users = User.select().where((User.id > 2) & (User.age > 30)).execute()

print("满足条件的用户:")
for u in users:
    print(f"{u.username}: {u.age}")

运行结果:

$  python.exe .\main.py
满足条件的用户:
tom: 35
kate: 42

多个条件的并集,比如id>4或者age>20的数据:

users = User.select().where((User.id > 4) | (User.age > 20)).execute()

运行结果:

$  python.exe .\main.py
满足条件的用户:
harry: 23
tom: 35
kate: 42

3.3. 排序

按照年龄增长排序:

users = User.select().order_by(User.age)

运行结果:

$  python.exe .\main.py
按照年龄增长排序:
jerry: 12
lily: 20
harry: 23
tom: 35
kate: 42

按照年龄减少方向排序:

users = User.select().order_by(User.age.desc())

运行结果:

$  python.exe .\main.py
按照年龄减少排序:
kate: 42
tom: 35
harry: 23
lily: 20
jerry: 12

3.4. 分页查询

最后,再来看看分页查询,这在前端展示大规模数据时非常有用。

一般的ORM会通过SQL语句中的limitoffset来实现分页查询,而Peewee直接提供了分页查询的API。

page_number = 1 # 页序号,从1开始
page_size = 3  # 每页数据的数量

users = User.select().paginate(page_number, page_size)
print(f"第{page_number}页数据:")
for u in users:
    print(f"{u.username}: {u.age}")

运行结果:

$  python.exe .\main.py
第1页数据:
harry: 23
lily: 20
tom: 35

这样就显示了前3个数据,如果把上面的page_numberg=2,那么会返回剩下的2条数据。

4. 总结

Peewee 还拥有众多扩展,如 Playhouse 提供了更多高级功能,包括对不同数据库的特定扩展(如 SQLite 的扩展函数)、模型生成工具、数据库迁移工具、反射功能等,大大增强了 Peewee 的实用性和灵活性。

本篇介绍的是最基本的使用方法,其他还有多表之间关系的建立和查询,请参考官方的文档。

总之,Peewee 以其简洁的语法、丰富的功能和良好的扩展性,成为 Python 开发者在数据库操作方面的有力工具,无论是小型项目还是大型应用,都能提供高效可靠的数据库交互支持。

到此这篇关于Python简洁强大的ORM框架Peewee的用法详解的文章就介绍到这了,更多相关Python Peewee内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Scrapy之爬取结果导出为Excel的实现过程

    Scrapy之爬取结果导出为Excel的实现过程

    这篇文章主要介绍了Scrapy之爬取结果导出为Excel的实现过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • python3检查字典传入函数键是否齐全的实例

    python3检查字典传入函数键是否齐全的实例

    这篇文章主要介绍了python3检查字典传入函数键是否齐全的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python文件与目录操作实例详解

    python文件与目录操作实例详解

    这篇文章主要介绍了python文件与目录操作方法,结合实例形式详细分析了Python关于文件与目录操作的常见技巧与使用方法,需要的朋友可以参考下
    2016-02-02
  • 在Python中进行CSV文件的读取与写入操作

    在Python中进行CSV文件的读取与写入操作

    本文详细介绍了如何在Python中使用csv模块进行CSV文件的读取和写入,包括基本用法和高级功能,如DictWriter和DictReader,以及注意事项,需要的朋友可以参考下
    2025-03-03
  • Python OpenCV寻找两条曲线直接的最短距离

    Python OpenCV寻找两条曲线直接的最短距离

    这篇文章主要为大家详细介绍了Python OpenCV寻找两条曲线直接的最短距离,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Python创建对称矩阵的方法示例【基于numpy模块】

    Python创建对称矩阵的方法示例【基于numpy模块】

    这篇文章主要介绍了Python创建对称矩阵的方法,结合实例形式分析了Python基于numpy模块实现矩阵运算的相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • python中import warnings的具体作用

    python中import warnings的具体作用

    在Python开发中,我们经常会遇到一些警告信息,本文主要介绍了python中import warnings的具体作用,以提醒用户潜在的问题,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Python生成器之yield详解

    Python生成器之yield详解

    这篇文章主要介绍了Python生成器yield,yield除了作为生成器的标志以外,还有一个「返回值」的功能,我们知道return也有这个功能,那么它跟return的这个返回值有什么区别呢,本文将详细的介绍yield,需要的朋友可以参考下
    2023-05-05
  • PyQt5 pyqt多线程操作入门

    PyQt5 pyqt多线程操作入门

    本篇文章主要介绍了PyQt5 pyqt多线程操作入门,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • LeetCode百钱买百鸡python递归解法示例

    LeetCode百钱买百鸡python递归解法示例

    这篇文章主要为大家介绍了LeetCode百钱买百鸡题目python递归解法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论