Python ORM框架Peewee用法详解

1. 什么是Peewee?

Peewee是一个简单且轻量级的Python ORM框架。ORM(Object-Relational Mapping)是一种将关系型数据库中的数据映射到对象上的技术。Peewee可以帮助我们在Python中与关系型数据库进行交互,而无需编写复杂的SQL语句。

2. 安装Peewee

Peewee可以通过pip命令安装:

pip install peewee

3. 连接数据库

3.1 使用SQLite数据库

Peewee支持多种关系型数据库,包括SQLite、MySQL和PostgreSQL等。我们可以通过以下代码来连接SQLite数据库:

from peewee import *

# SQLite database

db = SqliteDatabase('my_database.db')

这里我们使用SqliteDatabase连接SQLite数据库,并指定数据库文件名为my_database.db。如果my_database.db不存在,则会在当前工作目录中创建一个新的数据库文件。

3.2 使用MySQL数据库

如果我们要连接MySQL数据库,则需要使用MySQLDatabase类:

# MySQL database

db = MySQLDatabase('my_database', user='root', password='password',host='localhost', port=3306)

这里我们使用MySQLDatabase类连接MySQL数据库,同时指定了数据库名称、用户名、密码、主机和端口号。

3.3 使用PostgreSQL数据库

如果我们要连接PostgreSQL数据库,则需要使用PostgreSQLDatabase类:

# PostgreSQL database

db = PostgresqlDatabase('my_database', user='postgres', password='password', host='localhost', port=5432)

这里我们使用PostgresqlDatabase连接PostgreSQL数据库,同时指定了数据库名称、用户名、密码、主机和端口号。

4. 创建模型

在Peewee中,我们可以通过定义模型类来描述数据表结构。每个模型类对应数据库中的一个表,模型类中的每个属性对应数据表中的一个字段。

下面是一个示例模型类:

from peewee import *

# define a model

class Person(Model):

name = CharField()

age = IntegerField()

email = CharField(unique=True)

class Meta:

database = db

这个模型类描述了一个名为Person的数据表,其中包含三个字段:name、age和email。在这里,我们使用CharField字段来表示字符串类型,IntegerField字段来表示整数类型。同时,我们使用unique=True指定email字段需要是唯一的。

注意,我们在模型类中定义了一个Meta类,其中包含了database属性。这个属性用来指定模型类所绑定的数据库。在这里,我们指定了之前创建的db对象。

5. 操作数据库

5.1 插入数据

使用Peewee向数据库中插入数据非常简单:

# create an instance of model

person = Person(name='Tom', age=30, email='tom@example.com')

# save to database

person.save()

在这里,我们创建了一个Person对象,并将其保存到数据库中。通过调用save()方法,Peewee将自动为我们生成对应的INSERT语句。

5.2 查询数据

Peewee支持多种查询方式,包括简单查询、聚合查询、分组查询等。

5.2.1 简单查询

假设我们要查询所有年龄为30的人,可以使用以下代码:

# simple select

query = Person.select().where(Person.age == 30)

for person in query:

print(person.name, person.age, person.email)

在这里,我们使用select()方法来查询Person数据表中的记录,然后使用where()方法来添加条件,筛选年龄为30的记录。

5.2.2 聚合查询

如果我们要进行聚合查询,例如计算年龄的平均值,可以使用以下代码:

# aggregate select

query = Person.select(fn.Avg(Person.age))

for avg_age in query.scalar():

print('Average age:', avg_age)

在这里,我们使用fn.Avg()方法来计算年龄的平均值,然后使用scalar()方法将结果输出。注意,在scalar()方法中,我们使用了for循环来获取查询结果。

5.2.3 分组查询

如果我们需要对数据进行分组统计,例如按年龄分组计算人数,可以使用以下代码:

# group by select

query = Person.select(Person.age, fn.Count(Person.id)).group_by(Person.age)

for age, count in query.tuples():

print('Age:', age, 'Count:', count)

在这里,我们使用group_by()方法来指定分组条件,然后使用tuples()方法将结果输出为元组。通过for循环,我们依次获取每个分组的年龄和人数,并输出结果。

5.3 更新数据

使用Peewee更新数据也非常简单。例如,我们要将所有年龄为30的人的email字段更新为新的值,可以使用以下代码:

# update data

query = Person.update(email='new_email@example.com').where(Person.age == 30)

query.execute()

在这里,我们使用update()方法来指定要更新的字段及对应的值,然后使用where()方法来指定更新的条件,最后通过execute()方法执行更新操作。

5.4 删除数据

最后,使用Peewee删除数据也非常简单。例如,我们要删除所有年龄为30的人,可以使用以下代码:

# delete data

query = Person.delete().where(Person.age == 30)

query.execute()

在这里,我们使用delete()方法删除符合条件的数据,然后使用where()方法指定条件,最后通过execute()方法执行删除操作。

总结

本文介绍了Python ORM框架Peewee的基本用法。我们学习了如何连接不同类型的关系型数据库、如何定义模型类以及如何对数据库进行增删改查操作。Peewee具有简单且易学的特点,非常适合初学者使用。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签