爬虫之数据神器1---Peewee新手入门指南(1)

正文:

1. Peewee简介

        Peewee是一个简单、轻量级的Python ORM(对象关系映射)库,用于与关系型数据库进行交互。它的名字"Peewee"源自一种小型狗的名字,象征着其小巧灵活的特点。

1.1 Peewee的特点

包括:

  1. 简单易用:Peewee提供了简洁的API接口和直观的查询语法,使开发者能够以最小的学习成本使用它。
  2. 轻量级:Peewee是一个精简的库,没有过多的依赖,不会给项目增加额外的负担。
  3. 强大的查询语法:Peewee支持丰富的查询操作,包括过滤、排序、限制、连接等,能够满足大部分常见的数据库操作需求。
  4. 跨数据库支持:Peewee支持多种关系型数据库,如SQLite、MySQL、PostgreSQL等,可以灵活适配不同的数据库。
  5. 异步支持:Peewee也提供了对异步操作的支持,在一些需要高并发的场景下能够发挥出更好的性能。

1.2 Peewee的应用场景

由于Peewee具有易用性和灵活性,适用于各种规模的Python项目。它特别适合以下应用场景:

  1. 小型或中型项目:Peewee的小巧轻便使其成为小型或中型项目的理想选择,可以在项目中轻松地进行数据库操作。
  2. 原型开发:Peewee提供了简单直观的API,能够快速实现数据库功能,适合进行快速原型开发。
  3. Web应用程序:Peewee与Web框架(如Flask、Django等)结合使用,能够方便地进行数据库的CRUD操作,适用于构建各种Web应用程序。
  4. 数据分析和处理:Peewee可以方便地与数据分析库(如pandas)和数据处理工具(如NumPy)结合使用,进行数据的存储和查询。

1.3 Peewee的安装及环境配置

要安装Peewee,可以按照以下步骤进行:

  • 确保已经安装了Python解释器,可以在命令行输入以下命令来检查:
python --version
  • 通过pip安装Peewee库,可以在命令行中运行以下命令:
pip install peewee
  • 在项目中导入Peewee库:
from peewee import *

1.4 配置数据库连接

  • 具体的步骤根据所使用的数据库不同而有所区别。

    a. SQLite数据库连接配置:
    db = SqliteDatabase('mydatabase.db')
    
    b. MySQL数据库连接配置:
    db = MySQLDatabase('mydatabase', user='yourusername', password='yourpassword',host='localhost', port=3306)
    
    c. PostgreSQL数据库连接配置:
    db = PostgresqlDatabase('mydatabase', user='yourusername', password='yourpassword',host='localhost', port=5432)
    

这样,就完成了Peewee库的安装和环境配置,可以开始使用Peewee进行数据库操作了。


2. Peewee快速上手

在使用Peewee进行数据库操作之前,我们首先需要定义Peewee模型,并建立与数据库的连接。接下来,我们将学习如何创建表、进行增删改查操作以及如何进行查询、过滤和排序。

2.1 定义Peewee模型

        在Peewee中,我们使用Python类来定义数据库模型。每个模型类对应数据库中的一个表。我们可以通过继承Model类来定义模型,并在类的属性中定义表的字段。

from peewee import *# 建立数据库连接
db = SqliteDatabase('mydatabase.db')class Person(Model):name = CharField()age = IntegerField()class Meta:database = db

在上面的例子中,我们定义了一个名为Person的模型类,它拥有nameage两个字段,类型分别为CharFieldIntegerField。我们还通过设置Meta类的database属性来指定模型所使用的数据库连接。

2.2 创建表及初始化数据库连接

在使用Peewee之前,我们需要先创建数据库表,并与数据库建立连接。

# 创建表
db.create_tables([Person])# 初始化数据库连接
db.connect()

通过调用create_tables方法,我们能够创建我们定义的所有模型对应的表。然后,我们使用connect方法初始化数据库连接。

2.3 增删改查操作

接下来,我们可以使用Peewee进行常见的增删改查操作。下面是一些常用操作示例:

  • 新增记录:
person = Person(name='Alice', age=25)
person.save()

在上述示例中,我们创建了一个名为personPerson模型实例,并通过调用save方法将它保存到数据库中。

  • 删除记录:
person = Person.get(Person.name == 'Alice')
person.delete_instance()

上述代码中,我们使用get方法获取名为'Alice'的人员记录,并通过调用delete_instance方法将其从数据库中删除。

  • 更新记录:
person = Person.get(Person.name == 'Alice')
person.age = 26
person.save()

在上述示例中,我们使用get方法获取名为'Alice'的人员记录,并将其年龄从25更新为26,并通过调用save方法将更新后的记录保存到数据库中。

  • 查询记录:
persons = Person.select()
for person in persons:print(person.name, person.age)

上述代码中,我们使用select方法对Person表执行查询操作,并遍历结果集进行打印。

2.4 查询过滤及排序

Peewee提供了丰富的查询语法,使我们能够进行查询过滤和排序操作。

  • 查询过滤:

我们可以使用where方法进行条件过滤查询。

persons = Person.select().where(Person.age > 20)

上述示例中,我们查询年龄大于20岁的所有人员。

  • 排序:

我们可以使用order_by方法对查询结果进行排序。

persons = Person.select().order_by(Person.age.desc())

上述示例中,我们按照年龄降序对查询结果进行排序。

2.5 连接查询

连接查询允许我们将多个表进行关联查询,以获取更丰富的数据结果。以下是一个使用Peewee进行连接查询的示例:

class Author(Model):name = CharField()class Book(Model):title = CharField()author = ForeignKeyField(Author)# 查询作者及其所有书籍
query = (Author.select(Author.name, Book).join(Book))

在上述示例中,我们定义了两个模型类:AuthorBook,其中Book模型通过外键关联到Author模型。然后,我们使用join方法来拼接连接查询的条件,通过select方法选择要返回的字段。最后,通过执行查询语句,我们可以获取每个作者及其所有书籍的结果。

2.6 分组

使用分组操作,我们可以根据某个字段对查询结果进行分组。以下是一个使用Peewee进行分组查询的示例:

class Sale(Model):product = CharField()quantity = IntegerField()# 按产品分组并统计销售总量
query = (Sale.select(Sale.product, fn.SUM(Sale.quantity).alias('total')).group_by(Sale.product))

在上述示例中,我们定义了一个Sale模型,它包含产品名称和销售数量字段。通过使用group_by方法,我们可以按照产品进行分组。同时,使用SUM函数计算每个产品的销售总量,并为结果起别名为total

2.7 聚合

聚合操作允许我们对查询结果进行汇总计算,如求和、平均值等。以下是一个使用Peewee进行聚合查询的示例:

class Employee(Model):name = CharField()salary = IntegerField()# 查询平均工资
query = Employee.select(fn.AVG(Employee.salary).alias('avg_salary'))

在上述示例中,我们定义了一个Employee模型,它包含姓名和薪资字段。通过使用fn.AVG函数,我们可以计算员工薪资的平均值,并为结果起别名为avg_salary

ps : 上述示例只是其中的一部分示例,Peewee还提供了更多高级查询操作,如子查询、多级聚合等,可以根据实际情况进行学习和使用。


3. Peewee模型详解

3.1 模型字段类型说明

        Peewee支持各种类型的字段,如字符字段、整数字段、布尔字段等等。我们定义模型时,需要为每个字段选择合适的类型,这样Peewee才能知道对应的数据是什么格式,从而正确地在数据库中创建表和进行CRUD操作。

        比如,定义一个User模型:

from peewee import *class User(Model):username = CharField() age = IntegerField()is_active = BooleanField()

我在这里分别定义了字符串、整数和布尔类型的字段。字段类型要匹配你实际需要存储的数据格式。

3.2 模型的元数据和配置选项

有时候我们需要对模型添加一些额外信息,比如定义表名、主键,这可以通过元数据来实现:

class User(Model):id = PrimaryKeyField()class Meta:table_name = 'user_info'

通过定义Meta内部类,我们可以配置表名等选项。还可以配置数据库连接、表的schema等。

3.3 模型关系的定义

        关系数据库的魅力就在于可以定义模型之间的关联。在Peewee中,我们可以通过外键、一对多等方式定义模型关系:

class Post(Model):user = ForeignKeyField(User)class Comment(Model):post = ForeignKeyField(Post)user = ForeignKeyField(User)

这里我们实现了用户和帖子的一对多关系,以及帖子和评论的一对多关系。这样相关数据就可以被关联起来。

3.4 Peewee也支持模型数据验证

我们可以在字段上定义校验规则,比如非空、格式验证等,这样可以保证数据的完整性:

class User(Model):name = CharField(max_length=50, null=False)email = CharField(validators=[EmailValidator()]) 

以上这些都是Peewee模型的关键知识点,记住字段类型、模型关系、验证规则等概念,

总结:

        Peewee是一个简单、轻量级的Python ORM库,用于与关系型数据库进行交互。它具有简单易用、轻量级、强大的查询语法、跨数据库支持和异步支持等特点。Peewee适用于各种规模的Python项目,特别适合小型或中型项目、原型开发、Web应用程序和数据分析处理。安装和配置Peewee非常简单,只需通过pip安装Peewee库并设置数据库连接即可开始使用。

        在Peewee中,我们通过定义模型来进行数据库操作,每个模型对应数据库中的一个表。模型的字段类型包括CharField、IntegerField、BooleanField等,可以根据需要选择合适的字段类型。通过定义模型的元数据和配置选项,我们可以自定义表名、配置数据库连接等。Peewee还支持模型之间的关系定义,如外键和一对多关系,可以方便地关联相关数据。

        Peewee还提供了数据验证功能,我们可以在字段上定义验证规则,如非空、格式验证等,以保证数据的完整性。

        总的来说,Peewee是一个简单易用、功能强大的Python ORM库,通过它我们可以方便地进行数据库操作,应用于各种Python项目中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/789111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IT公司管理者日常工作思考

一、前言 作为IT公司的管理者,我们应该一切从实际出发,理论和实际相结合,以终为始,带领公司(组织)不断前进。当然前进包括稳重求进,稳步前进,积极扩张,厚积薄发。等等。大多数公司追求的都是稳中求进,没有稳的进都是在冒比较大的风险。积极扩张,又容易出现较大的风…

世优科技上榜2024年度《中国虚拟数字人影响力指数报告》

日前,第三期《中国虚拟数字人影响力指数报告》在中国网络视听大会上正式发布。本期《报告》由中国传媒大学媒体融合与传播国家重点实验室(以下简称“国重实验室”)、中国传媒大学数字人研究院编制,中国网络视听协会、人民日报智慧…

数据库加载驱动问题(java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver)

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver 遇到此问题,首先检查IDEA外部库中是否有mysql数据库驱动。如下所示: 如果发现外部库中存有mysql数据库驱动,需要在数据库配置文件中查看是否设置有时区mysql8.0以上版本需要设…

SAD法(附python实现)和Siamese神经网络计算图像的视差图

1 视差图 视差图:以左视图视差图为例,在像素位置p的视差值等于该像素在右图上的匹配点的列坐标减去其在左图上的列坐标 视差图和深度图: z f b d z \frac{fb}{d} zdfb​ 其中 d d d 是视差, f f f 是焦距, b b…

【漏洞复现】用友NC-Cloud系统queryRuleByDeptId存在SQL注入漏洞

“ 如棠安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的…

vue 实现的h5 页面,如何设置页面中的 title

修改页面中的title 公共修改方式在App.vue 中: created() {document.title "测试标题"; },单个页面修改,就在单个页面编写就ok

提高 API 性能的小技巧

引言 随着数字时代的到来,API(应用程序接口)已经成为连接不同服务和应用的桥梁,其意义远超技术工具本身。随着大数据、云服务和 5G 技术等领域的进步,API 的作用变得更加重要,它不仅促进了数字转型的发展&…

supersqli-攻防世界

题目 加个报错 1 and 11 #没报错判断为单引号字符注入 爆显位 1 order by 2#回显正常 1 order by 3#报错 说明列数是2 尝试联合查询 -1 union select 1,2# 被过滤了 return preg_match("/select|update|delete|drop|insert|where|\./i",$inject); select|update|d…

时间管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)大学生

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

git上传到本都仓库

摘要:本地初始化init仓库,进行pull和push;好处是便于利用存储设备进行git备份 git init --bare test.git 随便到一个空的目录下git clone 然后使用git上传 把git仓库删除之后再clone一次验证一下是否上传成功: 如果在ubantu上面没…

MySQL两表联查之分组成绩第几问题

MySQL 数据库操作实践:两表联查之分组成绩第几问题 在本篇博客中,我将展示MySQL 从创建表、到插入数据,并进行一些复杂的查询操作。 1. 建立表格 首先,我们创建两个表:department(部门)和 em…

数据资产盘点七步法:教你为什么盘,盘什么,怎么盘

数据作为企业一种“特殊资产”,已被列入企业的资产负债表。只有对数据资源进行统筹规划,全面梳理,“摸清家底”,才能让数据更好地服务于企业的业务应用。怎样识别数据资产、有效管理和运营数据资产,利用现有的数据资产…

语言的属性与计算

1.语言的根本属性 语言的根本属性,通常指的是那些使语言区别于其他任何形式的信息传递系统的本质特征,以下是一些关键的根本属性: 社会性:语言首先是人类社会的产物,是社会成员之间进行思想交流和信息传递的主要工具&…

spring和springboot的区别戏说

Spring框架和Spring Boot是Java开发领域中两个非常重要的技术,它们之间的关系和区别可以用一种轻松幽默的方式来描述。 Spring框架:老派绅士 想象一下,Spring框架就像是一位老派的绅士,他有着丰富的经验和深厚的底蕴。他擅长管理…

Android源码笔记-输入事件(一)

这一节主要了解一下Android输入事件源码,Android输入系统的工作原理概括来说,就是监控/dev/input/下的所有设备节点,当某个节点有数据可读时,将数据读出并进行一系列的加工,然后在所有的窗口中寻找合适的事件接收者&am…

05 | Swoole 源码分析之 WebSocket 模块

首发原文链接:Swoole 源码分析之 WebSocket 模块 大家好,我是码农先森。 引言 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许客户端和服务器之间进行实时数据传输。 与传统的 HTTP 请求-响应模型不同,WebSocket 可以保持…

Bash相关

Bash shell是Linux内核与用户之间的解释器程序 变量 自定义变量,名称可以用数字、字母、下划线、不能以数字开头,不能使用特殊符号,等号两边不能有空格 格式:变量名称值 环境变量,由系统提前定义好,使用…

node res.end返回json格式数据

使用 Node.js 内置 http 模块的createServer()方法创建一个新的HTTP服务器并返回json数据,代码如下: const http require(http);const hostname 127.0.0.1; const port 3000;const data [{ name: 测试1号, index: 0 },{ name: 测试2号, index: 1 },…

PhpWord导入试卷

规定word导入格式 1、[单选题][2024][一般]题目1 A.选项1 B.选项2 C.选项3 D.选项4 答案:D 试题图片(上传多媒体图片): 分数:2 答案解析: 2、[多选题][2024][困难]题目2 A.选项1 B.选项2 C.选项3 D.选项4 E…

[计算机效率] 格式转换工具:格式工厂

3.14 格式转换工具:格式工厂 格式工厂是一款功能强大的多媒体格式转换软件,可以实现音频、视频、图片等多种格式的转换。它支持几乎所有类型的多媒体格式,包括视频、音频、图片、字幕等,可以轻松实现格式之间的转换,并…