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具有简单且易学的特点,非常适合初学者使用。