探索 Peewee:轻量级 Python ORM 简明指南

news2025/2/23 5:27:21

文章目录

  • 探索 Peewee:轻量级 Python ORM 简明指南
      • 主要特点:
      • 安装:
      • 使用示例:
        • 1. 定义模型:
        • 2. 初始化数据库:
        • 3. 数据操作(增、查、改、删):
        • 4. 查询构建器:
        • 5. 迁移(通过 Playhouse 库):
      • 总结:

探索 Peewee:轻量级 Python ORM 简明指南

Peewee 是一个轻量级的 Python ORM(对象关系映射)库,旨在简化数据库操作。它适用于小型到中型应用程序,特别是在需要简洁代码和快速开发的场景中。Peewee 提供了非常简洁的 API,支持 SQLite、PostgreSQL、MySQL 等数据库,且易于学习和使用。

主要特点:

  1. 轻量级:Peewee 以简洁和小巧为设计目标,非常适合小型项目或者原型开发。
  2. 支持多种数据库:Peewee 支持 SQLite、PostgreSQL、MySQL 和其他一些常见的数据库系统。
  3. 自动化表结构生成:Peewee 能够根据模型类自动生成数据库表结构。
  4. 内建查询构建器:Peewee 提供了一个强大的查询构建器,支持复杂的查询操作,同时它的语法简单直观。
  5. 迁移工具:Peewee 有一些第三方工具可以帮助进行数据库迁移(如 playhouse.migrate)。
  6. 易于集成:Peewee 可以与其他 Web 框架和异步库结合使用。

安装:

首先,你可以通过 pip 安装 Peewee:

pip install peewee

使用示例:

以下是一个简单的 Peewee 使用示例。

1. 定义模型:

在 Peewee 中,模型通过继承 peewee.Model 类来定义。每个字段都是 peewee 提供的字段类型,如 CharField, IntegerField, FloatField 等。

from peewee import Model, CharField, IntegerField, SqliteDatabase

# 创建数据库连接
db = SqliteDatabase('example.db')

# 定义模型
class User(Model):
    name = CharField(max_length=100)  # 定义字段
    age = IntegerField()  # 整型字段
    email = CharField(max_length=100)

    class Meta:
        database = db  # 指定数据库连接
2. 初始化数据库:

在进行数据库操作之前,必须先连接数据库并创建表。

# 连接到数据库
db.connect()

# 创建所有模型对应的表
db.create_tables([User])
3. 数据操作(增、查、改、删):

Peewee 提供了简单易用的 API 来执行 CRUD 操作(增、查、改、删)。

# 增:创建一个新用户
user = User.create(name="John", age=30, email="john@example.com")

# 查:获取一个用户(查询条件)
user = User.get(User.name == "John")
print(f"User: {user.name}, Email: {user.email}")

# 查:获取所有用户
users = User.select()
for user in users:
    print(f"{user.name} - {user.age} - {user.email}")

# 改:更新用户数据
user.age = 31
user.save()

# 删:删除用户
user.delete_instance()
4. 查询构建器:

Peewee 提供了丰富的查询功能,可以进行条件查询、排序、聚合等操作。

# 查询:获取所有年龄大于30岁的用户
users = User.select().where(User.age > 30)
for user in users:
    print(f"User: {user.name}, Age: {user.age}")

# 排序:按年龄升序排列
users = User.select().order_by(User.age)
for user in users:
    print(f"User: {user.name}, Age: {user.age}")
5. 迁移(通过 Playhouse 库):

Peewee 不内建迁移工具,但可以使用 playhouse.migrate 扩展来处理数据库迁移。

from playhouse.migrate import SqliteDatabase, migrate

# 定义数据库连接
db = SqliteDatabase('example.db')
migrator = SqliteMigrator(db)

# 添加新字段
with db.atomic():
    migrate(
        migrator.add_column('user', 'phone', CharField(null=True))
    )

总结:

Peewee 是一个非常适合小型和中型项目的轻量级 ORM,具有简洁的 API 和良好的文档支持。它适合那些不需要像 Django 或 SQLAlchemy 那样高度复杂和灵活的功能的开发者。Peewee 易于学习,能够快速上手,并且能完成大部分常见的数据库操作任务。

对于不需要大规模复杂数据库操作的应用,Peewee 是一个非常不错的选择。如果你正在寻找一个简单、快速和易于集成的 ORM,Peewee 会是一个很好的工具。

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

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

相关文章

自学Java-AI结合GUI开发一个石头迷阵的游戏

自学Java-AI结合GUI开发一个石头迷阵的游戏 准备环节1、创建石头迷阵的界面2、打乱顺序3、控制上下左右移动4、判断是否通关5、统计移动步骤,重启游戏6、拓展问题 准备环节 技术: 1、GUI界面编程 2、二维数组 3、程序流程控制 4、面向对象编程 ∙ \bulle…

Liunx(CentOS-6-x86_64)系统安装MySql(5.6.50)

一:安装Liunx(CentOS-6-x86_64) 安装Liunx(CentOS-6-x86_64) 二:下载MySql(5.6.50) MySql下载官网 二:安装MySql 2.1 将mysql上传到Liunx 文件地址 /usr/local/ 2…

Java Web开发实战与项目——开发一个在线论坛系统

在线论坛系统是一个常见的Web应用,通常具有用户注册、帖子发布、评论互动、消息推送等基本功能。开发这样一个系统,既涉及到前后端的技术栈选择,也需要考虑性能、扩展性等实际问题。本文将从设计论坛模块、实现消息推送与实时更新功能、以及优…

ubuntu24.04无法安装向日葵,提示依赖libgconf-2-4怎么办?

在向日葵官方下载的deb包&#xff0c;目前是SunloginClient_15.2.0.63062_amd64.deb&#xff0c;执行安装代码&#xff0c;如下&#xff1a; sudo < /span > dpkg< /span > -i< /span > SunloginClient_15< /span >.2< /span >.0< /span >…

Kubernetes 使用 Kube-Prometheus 构建指标监控 +飞书告警

1 介绍 Prometheus Operator 为 Kubernetes 提供了对 Prometheus 机器相关监控组件的本地部署和管理方案&#xff0c;该项目的目的是为了简化和自动化基于 Prometheus 的监控栈配置&#xff0c;主要包括以下几个功能&#xff1a; Kubernetes 自定义资源&#xff1a;使用 Kube…

WPF的页面设计和实用功能实现

目录 一、TextBlock和TextBox 1. 在TextBlock中实时显示当前时间 二、ListView 1.ListView显示数据 三、ComboBox 1. ComboBox和CheckBox组合实现下拉框多选 四、Button 1. 设计Button按钮的边框为圆角&#xff0c;并对指针悬停时的颜色进行设置 一、TextBlock和TextBox…

window安装MySQL5.7

1、下载MySQL5.7.24 浏览器打开&#xff1a; https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-winx64.zip 2、解压缩 下载下来的是一个压缩包&#xff0c;解压到你想放到的目录下面&#xff0c;我放的是“C:\MySQL” 3、配置MySQL环境变量 计算机右键 - 属性 …

数据结构:哈希表(二)

目录 一、哈希表 1、概念 二、哈希冲突 1、概念 2、冲突避免 &#xff08;1&#xff09;哈希函数设计 &#xff08;2&#xff09;负载因子调节 3、冲突解决 &#xff08;1&#xff09;闭散列 1、线性探测 2、二次探测 &#xff08;2&#xff09;开散列 4、哈希桶实…

blender笔记2

一、物体贴地 物体->变换->对齐物体 ->对齐弹窗(对齐模式&#xff1a;反方&#xff0c;相对于&#xff1a;场景原点&#xff0c;对齐&#xff1a;z)。 之后可以设置原点->原点--3d游标 二、面上有阴影 在编辑模式下操作过后&#xff0c;物体面有阴影。 数据-&g…

1.21作业

1 unserialize3 当序列化字符串中属性个数大于实际属性个数时&#xff0c;不会执行反序列化 外部如果是unserialize&#xff08;&#xff09;会调用wakeup&#xff08;&#xff09;方法&#xff0c;输出“bad request”——构造url绕过wakeup 类型&#xff1a;public class&…

【Quest开发】全身跟踪(一)

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 最终效果&#xff1a;能像meta的操作室沉浸场景一样根据头盔移动来推断用户姿势&#xff0c;实现走路、蹲下、手势匹配等功能 需要借助UnityMovement这个包 GitHub …

最新版本Exoplayer扩展FFmpeg音频软解码保姆级教程

ExoPlayer 是一个开源的 Android 媒体播放库&#xff0c;由 Google 开发和维护&#xff0c;用于替代 Android 系统自带的 MediaPlayer。它提供了更强大的功能、更好的性能和更高的灵活性&#xff0c;适用于各种复杂的媒体播放场景。所以被广泛用于各种播放器场景。 最近项目中…

JS:页面事件

文章目录 一、页面加载事件二、页面滚动事件三、页面尺寸事件总结 一、页面加载事件 有时候我们会把script的内容放在body前&#xff0c;这时候代码的执行在元素的加载之前&#xff0c;会导致页面元素未加载而报错 解决办法是调用Window的load加载事件&#xff0c;将所有操作放…

vue,vue3 keepalive没有效果,无法缓存页面include无效,keep-alive

keepalive没有效果&#xff0c;无法缓存页面&#xff1f; 问题大概是组件的name值不对应&#xff0c;vue2修改组件文件的name值&#xff0c;vue3保持组件文件名称和路由页面配置的name一致就可以了&#xff0c;如果vue3不想保持一致&#xff0c;必须手动在文件后面添加export..…

DeepSeek智能测试知识库助手PRO版:多格式支持+性能优化

前言 测试工程师在管理测试资产时,需要面对多种文档格式、大量文件分类及知识库的构建任务。为了解决这些问题,我们升级了 DeepSeek智能测试知识库助手,不仅支持更多文档格式,还加入了 多线程并发处理 和 可扩展格式支持,大幅提升处理性能和灵活性。 主要功能亮点: 多格…

纯手工搭建整套CI/CD流水线指南

目录 一、前言 二、环境准备 1、服务器开荒&#xff08;192.168.1.200&#xff09; 2、离线资源清单&#xff08;提前用U盘拷好&#xff09; 三、硬核安装&#xff1a;比拧螺丝还细的步骤 Step1&#xff1a;搭建GitLab&#xff08;注意&#xff01;这是只内存饕餮&#xf…

智能硬件新时代,EasyRTC开启物联音视频新纪元

在万物互联的时代浪潮中&#xff0c;智能硬件正以前所未有的速度融入我们的生活&#xff0c;从智能家居的便捷控制&#xff0c;到智能穿戴设备的健康监测&#xff0c;再到工业物联网的高效管理&#xff0c;智能硬件的应用场景不断拓展。而在这个智能硬件蓬勃发展的背后&#xf…

Rust编程语言入门教程(八)所有权 Stack vs Heap

Rust 系列 &#x1f380;Rust编程语言入门教程&#xff08;一&#xff09;安装Rust&#x1f6aa; &#x1f380;Rust编程语言入门教程&#xff08;二&#xff09;hello_world&#x1f6aa; &#x1f380;Rust编程语言入门教程&#xff08;三&#xff09; Hello Cargo&#x1f…

交易所开发:数字市场的核心动力

数字资产交易所作为连接用户与市场的核心枢纽&#xff0c;已成为推动数字经济发展的关键引擎。其开发不仅需要技术创新&#xff0c;还需兼顾用户体验、合规安全与生态构建&#xff0c;以下是交易所开发的核心要素与实践路径分析&#xff1a; 一、交易所的核心定位与技术架构…

Jmeter进阶篇(34)如何解决jmeter.save.saveservice.timestamp_format=ms报错?

问题描述 今天使用Jmeter完成压测执行,然后使用命令将jtl文件转换成html报告时,遇到了报错! 大致就是说jmeter里定义了一个jmeter.save.saveservice.timestamp_format=ms的时间格式,但是jtl文件中的时间格式不是标准的这个ms格式,导致无法正常解析。对于这个问题,有如下…