当前位置: 首页 > news >正文

Python 轻量级的 ORM(对象关系映射)框架 - Peewee 入门教程

文章目录

    • 基础
      • 创建数据库管理对象
      • 定义自己的模型
      • 连接数据库并创建表
      • 插入数据
      • 查询数据
      • 更新数据
      • 删除数据
    • 进阶
      • 复合主键模型示例
      • 复杂查询示例(以Relation模型为例)

基础

创建数据库管理对象

from peewee import *db = MySQLDatabase('test_db', user='root', password='password', host='localhost', port=3306)

定义自己的模型


class User(Model):uid = AutoField() # 自增主键name = CharField(max_length=20)age = IntegerField(default=0)address = CharField(null = True) # 允许空class Meta:# 关联数据库,这是必选的database = db# 设置 编写和排序规则,这是可选的# table_settings = ["DEFAULT CHARSET=utf8mb4", "COLLATE=utf8mb4_unicode_ci"]

连接数据库并创建表


# 连接数据库
db.connect()# 往数据库创建表
db.create_tables([User, MyMeta])

插入数据


# 往数据库插入一条数据
User.create(name = 'yao7777', age = 18)# 通过字典插入
userInfo = {'name':'yao888', 'age': 28}
User.insert(userInfo).execute()

查询数据


users = User.select() # 获取所有用户信息
for user in users:print(user.name, user.age)users = User.select().where(User.name == 'yao7777') # 条件查询
users = User.select().where(User.name == 'yao7777', User.age == 18) # 多条件查询(AND)user = User.get_by_id(2) # 如果数据不存在会崩溃
user = User.get_or_none(User.uid == 900) # 如果数据不存在,返回 None
if user:print(user.name)

更新数据


users = User.select()
user = users[0]user.age = 28
user.address = '广东广州'
user.save()

删除数据


users = User.select()
user = users[0]
# 删除一条数据
user.delete_instance()# 删除表和数据
User.drop_table()
# 删除表数据
User.delete().execute()

进阶

复合主键模型示例


class Relation(Model):'''关联数据'''rid = IntegerField()'''仓库 ID'''mid = IntegerField()'''数据元 ID'''star = IntegerField(default = 0)'''本期 star'''starPrev = IntegerField(default = 0)'''上期 star'''class Meta:database = dbprimary_key = CompositeKey('rid', 'mid') # 2个主键

复杂查询示例(以Relation模型为例)

查找指定 mid 的所有数据,且排序按照 (star - starPrev) 的差值降序


relation = Relation.select(Relation.rid, Relation.star, (Relation.star - Relation.starPrev).alias('offsetStar')).order_by(SQL('offsetStar').desc()).where(Relation.mid == meta.id)

offsetStar 是给 (star - starPrev) 差值起的别名

http://www.dtcms.com/a/352512.html

相关文章:

  • CentOS 7 升级 OpenSSH 10.0p2 完整教程(含 Telnet 备份)
  • 性能瓶颈定位更快更准:ARMS 持续剖析能力升级解析
  • 告别繁琐运维,拥抱自动化:EKS Auto Mode 实战指南
  • C代码学习笔记(二)
  • RK3506 开发板:嵌入式技术赋能多行业转型升级
  • 大数据时代UI前端的智能化升级路径:基于用户行为数据的预测性分析
  • PMP项目管理知识点-⑨项⽬资源管理
  • 大模型应用编排工具Dify之插件探索
  • 【LeetCode - 每日1题】求对角线最长矩形的面积
  • Claude 的优势深度解析:大模型竞争格局中的隐藏护城河
  • NX773HSA19美光固态闪存D8BJND8BJQ
  • inline内联函数
  • TensorFlow 深度学习:使用 feature_column 训练心脏病分类模型
  • 【软考论文】论可观测性架构技术的应用
  • 【资源】Github资源整理
  • C6.3:发射结交流电阻
  • Vue3 + Element Plus实现表格多行文本截断与智能Tooltip提示
  • 【黑客技术零基础入门】2025最新黑客工具软件大全,零基础入门到精通,收藏这篇就够了!
  • 【数据结构】单链表详解
  • Java基础 8.26
  • 【7】SQL 语句基础应用
  • 基于SpringBoot的演唱会网上订票系统的设计与实现(代码+数据库+LW)
  • 自由学习记录(89)
  • 一份兼容多端的HTML邮件模板实践与详解
  • 美妆品牌如何用 DAM 管理海量产品图片?
  • 开脑洞,末日降临,堡垒求生,ARMxy系列BL410能做什么?
  • vagrant怎么在宿主机管理虚拟机镜像box(先搁置)
  • 中国移动云电脑一体机-创维LB2004_瑞芯微RK3566_2G+32G_开ADB安装软件教程
  • 【自监督检测】HASSOD:Hierarchical Adaptive Self-Supervised Object Detection
  • 《基于 Spring Boot 的足球青训俱乐部管理后台系统设计与实现--文末获取源码》