首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

peewee,ORM框架的优雅方案!

在写 Python 的时候老是拼接 SQL 语句烦不烦?一不小心手抖多打个引号就报错,这谁顶得住啊!今天我要安利一个特别好用的ORM框架- Peewee,它能让你优雅地操作数据库,就像在玩积木一样简单。

1.

啥是 Peewee?

Peewee 是个轻量级的 ORM 框架,把数据库里的表变成 Python 里的类,字段变成类的属性。写代码的时候完全不用管 SQL 语句咋写,框架都帮你搞定了。代码写起来贼简单,性能还不赖。

from peewee import *

db = SqliteDatabase('my_app.db')

class User(Model):

  username = CharField(unique=True)

  email = CharField()

  class Meta:

      database = db

2.

增删改查有多爽

查数据超级简单,就跟写 Python 代码一样:

# 查找所有用户

users = User.select()

# 条件查询

active_users = User.select().where(User.active == True)

# 新增用户

new_user = User.create(username='小明', email='xm@example.com')

# 更新数据

User.update(active=False).where(User.username == '小明').execute()

# 删除数据

User.delete().where(User.username == '小明').execute()

3.

玩转关联查询

数据库里表和表之间有关系,Peewee 也能轻松搞定:

class Tweet(Model):

  user = ForeignKeyField(User, backref='tweets')

  content = TextField()

  created_at = DateTimeField()

  class Meta:

      database = db

# 查询小明发的所有推文

tweets = Tweet.select().join(User).where(User.username == '小明')

温馨提示:创建外键关系的时候,backref参数特别有用,让你能从 User 对象直接访问到它的所有 tweets。

4.

贴心的小功能

Peewee 还有不少实用的功能:

# 分页查询

page = User.select().paginate(1, 20)  # 第1页,每页20条

# 聚合查询

total = Tweet.select().count()

latest = Tweet.select().order_by(Tweet.created_at.desc()).first()

# 原生SQL

User.raw('SELECT * FROM user WHERE username = ?', '小明')

有时候会碰到需要用原生 SQL 的场景,Peewee 也考虑到了,直接用raw方法就成。

5.

坑点预警

得提醒下,用 Peewee 也有几个坑:

默认惰性查询,数据不真正用到的时候不会去查数据库

关联查询可能会有 N+1 问题,记得用prefetch优化

字段默认不能为空,要允许空值得显式指定null=True

nickname = CharField(null=True)  # 这样才能存空值

写了这么多,我觉得 Peewee 是个特别适合中小型项目的 ORM 框架。代码简洁,上手快,功能也够用。不过数据库操作性能要求特别高的项目,可能还是得上 SQLAlchemy。

一句话:会写 Python,就能用 Peewee。数据库操作从此告别手写 SQL!

贴个小技巧:开发的时候记得打开 SQL 日志,方便调试:

import logging

logger.setLevel(logging.DEBUG)

logger.addHandler(logging.StreamHandler())

推荐阅读

  • 发表于:
  • 原文链接https://page.om.qq.com/page/ORpRPhQHdY0Ly8DigwgD1cWA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券