Python Peewee数据库ORM框架详解

一、简介

Peewee是一个轻量级的Python ORM框架,支持MySql,Postgresql,Sqlite等多种关系型数据库,具有优雅的api和简洁的实现方式。它受到Django ORM和SQLAlchemy的启发,可以处理所有的常见数据库操作,并具有高度的扩展性。

Peewee使用模型定义数据结构,同时支持数据表关系建模,使得开发人员可以轻松地进行数据库访问。同时,Peewee支持丰富的查询方式和数据库事务管理,让开发人员可以专注于业务逻辑,而不需要关注过于底层的数据库操作细节。

二、模型定义

在Peewee中,模型是数据结构的抽象,它通常会映射为数据库中的一个表。在定义模型时,通常需要指定以下信息:

1. 数据表名

class Person(Model):
    name = CharField()
    age = IntegerField()

    class Meta:
        database = db # db为数据库实例变量
        db_table = 'person' # 数据表名为person

2. 字段类型

class User(Model):
    username = CharField(unique=True)
    age = IntegerField(default=18)
    is_admin = BooleanField(null=False, default=False)
    regist_time = DateTimeField(default=datetime.now)

Peewee支持多种字段类型,包括CharField,TextField,IntegerField等,可以通过不同的字段类型进行灵活的数据存储。

3. 数据关系

在Peewee中,通过外键实现不同数据表之间的关系。如下面的代码示例中,Blog和Tag两个模型之间通过ManyToManyField建立了多对多的关系:

class Blog(Model):
    title = CharField()
    content = TextField()
    publish_date = DateField()

    class Meta:
        database = db # db为数据库实例变量

class Tag(Model):
    name = CharField()
    blogs = ManyToManyField(Blog, backref='tags')

    class Meta:
        database = db # db为数据库实例变量

三、CRUD操作

Peewee提供了多种简洁清晰的数据库操作方式:

1. 创建

如果需要向数据库中插入数据,可以使用save()方法或create()方法进行创建:

new_person = Person(name='Tom', age=20)
new_person.save()

Person.create(name='Jerry', age=18)

2. 查询

Peewee支持多种查询方式,包括filter(),get()和raw()。其中filter()可以支持多个条件查询,get()可以直接根据主键查询,raw()可以使用原始的SQL查询语句来进行查询。

result = Person.filter(name='Tom', age=20)
result = Person.get(Person.id == 1)
result = Person.raw('SELECT * FROM person WHERE name=\'Tom\';')

3. 更新

如果需要更新数据,可以使用save()方法或update()方法:

person = Person.get(Person.id == 1)
person.name = 'Leo'
person.save()

Person.update(name='Jack').where(Person.age <= 20).execute()

4. 删除

如果需要删除数据,可以使用delete_instance()方法或delete()方法进行删除:

person = Person.get(Person.id == 1)
person.delete_instance()

Person.delete().where(Person.age > 20).execute()

四、高级查询

Peewee支持多种高级查询方式,可以灵活地进行复杂的查询操作:

1. 关联查询

在Peewee中,可以通过join方法进行关联查询。如下面的例子中,通过Blog和Tag两个模型之间的关系建立了一张临时表查询对应的所有数据:

result = Blog.select().join(Tag).where(Tag.name=='Python')
for blog in result:
    print(blog.title)

2. 聚合查询

在Peewee中,可以对数据进行聚合计算。如下面的例子,在Person表中求所有人年龄的平均值:

avg_age = Person.select(fn.AVG(Person.age)).scalar()
print(avg_age)

3. 分组查询

在Peewee中,可以通过group_by方法对数据进行分组查询。如下面的例子,在Person表中按照年龄进行分组查询:

query = Person\
        .select(Person.age, fn.COUNT(Person.id))\
        .group_by(Person.age)\
        .order_by(Person.age)

for person in query:
    print(person.age, person.count)

五、事务管理

在Peewee中,可以使用transaction()方法进行事务管理操作。在事务的执行中,如果出现异常,会自动回滚事务。

with db.atomic() as txn:
    p1 = Person(name='Tom', age=20)
    p1.save()
    p2 = Person(name='Jerry', age=18)
    p2.save()

六、小结

在本篇文章中,我们对Python Peewee ORM框架进行了详细的介绍。Peewee具有简洁的api和灵活的实现方式,支持多种关系型数据库,并且具有优秀的扩展性。通过Peewee,我们可以在Python应用程序中轻松地进行数据库访问,并且进行复杂的查询和事务管理操作。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/150938.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-10 01:11
下一篇 2024-11-10 01:11

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29

发表回复

登录后才能评论