Peewee:Python 简洁强大的 ORM 框架
在 Python 的开发世界中,数据库操作是至关重要的一环。
今天介绍的 Peewee 作为一款简洁且功能强大的 ORM(对象关系映射)框架,为开发者提供了高效便捷的数据库交互方式。
1. Peewee概述
Peewee 是一个简单小巧的 ORM,它的概念简洁明了,易于学习和使用。
能够与 SQLite、MySQL、MariaDB、PostgreSQL 等多种数据库协同工作,拥有丰富的扩展功能,其源代码托管于 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语句中的limit和offset来实现分页查询,而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 开发者在数据库操作方面的有力工具,无论是小型项目还是大型应用,都能提供高效可靠的数据库交互支持。
Peewee:Python 简洁强大的 ORM 框架的更多相关文章
- Mego(2) - NET主流ORM框架分析
接上文我们测试了各个ORM框架的性能,大家可以很直观的看到各个ORM框架与原生的ADO.NET在境删改查的性能差异.这里和大家分享下我对ORM框架的理解及一些使用经验. ORM框架工作原理 典型ORM ...
- Mego(03) - ORM框架的新选择
前言 从之前的两遍文章可以看出ORM的现状. Mego(01) - NET中主流ORM框架性能对比 Mego(02) - NET主流ORM框架分析 首先我们先谈下一个我们希望的ORM框架是什么样子的: ...
- Python ORM框架之SQLAlchemy
前言: Django的ORM虽然强大,但是毕竟局限在Django,而SQLAlchemy是Python中的ORM框架: SQLAlchemy的作用是:类/对象--->SQL语句--->通过 ...
- Python 常用的ORM框架简介
ORM概念ORM(Object Ralational Mapping,对象关系映射)用来把对象模型表示的对象映射到基于S Q L 的关系模型数据库结构中去.这样,我们在具体的操作实体对象的时候,就不需 ...
- Python操作mysql之SQLAchemy(ORM框架)
SQLAchemy SQLAchemy 解析: SQLAchemy是python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作, 简言之便是:将对象转换成SQ ...
- Python操作redis、memcache和ORM框架_Day13
一.memcache Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...
- Excelbatis-一个将excel文件读入成实体列表、将实体列表解析成excel文件的ORM框架,简洁易于配置、可扩展性好
欢迎使用Excelbatis! github地址:https://github.com/log4leo/Excelbatis Excelbatis的优点 和spring天然结合,易于接入 xsd支持, ...
- python(十二)下:ORM框架SQLAlchemy使用学习
此出处:http://blog.csdn.net/fgf00/article/details/52949973 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 ...
- python——type()、metaclass元类和精简ORM框架
1.type()函数 if __name__ == '__main__': h = hello() h.hello() print(type(hello)) print(type(h)) Hello, ...
- python的ORM框架SQLAlchemy
本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 一.ORM介绍 如果写程序用pymysql和程序交互,那是不是要写原生sql语句 ...
随机推荐
- 量子线路设计:减少CNOT和T门的意义。
在量子线路的设计中,我们往往希望减少线路中的CNOT门和T门的数目,原因如下: 一般文献宣称减少T门的数量是为了更高效地执行容错量子计算(fault-tolerant quantum computat ...
- 低功耗4G模组:Air780EP开发板RC522实例
本文讲解合宙Air780EP开发板RC522实例,文末[阅读原文]获取最新资料. 本文档适用于Air780EP开发板 关联文档和使用工具 LuatOS-Soc固件获取 https://gitee. ...
- pycharm集成Jupyter Notebook
1. Jupyter Notebook Jupyter项目是一个非盈利的开源项目,源于 2014 年的 ipython 项目,支持运行 40 多种编程语言.Jupyter Notebook 的本质是一 ...
- Skyvern – AI浏览器自动化测试工具
Skyvern – AI浏览器自动化测试工具 Skyvern是什么 Skyvern是开源的浏览器自动化工具,结合大型语言模型(LLMs)和计算机视觉技术实现复杂的网页交互和数据提取.与传统的 ...
- (系列十四)Vue3+WebApi 搭建动态菜单
说明 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发). 该系统文章,我会尽量说的非常详细,做到不管新手.老手都能看懂. 说明:OverallAuth2 ...
- 鸿蒙NEXT开发案例:保质期计算
[引言] 保质期计算应用是一个基于鸿蒙NEXT框架开发的数字和文本统计组件.用户可以输入商品的生产日期和保质期天数,应用会自动计算并展示相关信息,包括保质状态.剩余天数.生产日期和到期日期. [环境准 ...
- uni-app小程序(快手、抖音)getCurrentPages使用坑位记录2
前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验也挺棒的,现公司项目就是主推uni-app,我主要负责抖音和快 ...
- Grid 网格布局备忘录
概述 网格布局(Grid)是最强大的 CSS 布局方案. 它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局. Grid 布局与 Flex 布局有一定的相似性,都可以指定容器内部多个 ...
- 使用Python实现两组数据纵向排序
一.引言 在数据分析和处理过程中,排序是一项非常常见的操作.排序操作能够让我们更清晰地理解数据,从而进行进一步的分析和处理.在Python中,排序操作通常可以通过内置函数或第三方库来实现.本文将详细讲 ...
- docker启动所有容器命令
启动所有容器 docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) 关闭所有容器 docker stop $(docker ps ...