Python的轻量级ORM框架peewee使用教程


Posted in Python onFebruary 05, 2021

ORM框架使用最广泛的就是SQLAlchemy和Django自带的ORM框架,但是SQLAlchemy的语法显然相对Django的ORM框架麻烦一点。

而Django本身是一个web框架,比较重量级,仅仅为了使用Django的ORM框架的功能,而安装Django有点导致系统臃肿。而peewee这个框架语法几乎与Django的ORM框架一致,而又非常轻量。

它的安装非常简单:

pip install peewee

如果你在使用mysql数据库的过程中报出如下错误:

peewee.ImproperlyConfigured: MySQL driver not installed!

则需要安装一个mysql的驱动:

pip install pymysql

peewee的whl包是880kB,pymysql的whl包是51KB,非常轻量级。

peewee的官方文档地址:http://docs.peewee-orm.com/en/latest/index.html

下面测试一下各项功能:

from peewee import *

db = MySQLDatabase('test', host="localhost", user='root', passwd='123456', port=3306)


# 定义Person
class Person(Model):
  name = CharField()
  birthday = DateField()
  is_relative = BooleanField()

  class Meta:
    database = db
    
def test_create():
  Person.create_table()
  # 创建多张表也可以这样
  # database.create_tables([Person])


def test_insert():
  # 添加一条数据
  p = Person(name='小华', birthday=date(1996, 12, 20), is_relative=True)
  p.save()


def test_delete():
  # 删除姓名为perter的数据
  Person.delete().where(Person.name == 'perter').execute()
  # 已经实例化的数据, 使用delete_instance
  p = Person(name='小华', birthday=date(1996, 12, 20), is_relative=False)
  p.id = 1
  p.save()
  p.delete_instance()


def test_update():
  # 已经实例化的数据,指定了id这个primary key,则此时保存就是更新数据
  p = Person(name='小华', birthday=date(1996, 12, 20), is_relative=False)
  p.id = 1
  p.save()

  # 更新birthday数据
  q = Person.update({Person.birthday: date(1983, 12, 21)}).where(Person.name == '小华')
  q.execute()


def test_query():
  # 查询单条数据
  p = Person.get(Person.name == '小华')
  print(p.name, p.birthday, p.is_relative)

  # 使用where().get()查询
  p = Person.select().where(Person.name == '小华').get()
  print(p.name, p.birthday, p.is_relative)

  # 查询多条数据
  persons = Person.select().where(Person.is_relative == True)
  for p in persons:
    print(p.name, p.birthday, p.is_relative)

下面测试一个各个方法。

测试创建表:

if __name__=="__main__":
  Person.create_table()

执行完毕,检查数据库成功创建下面这张表:

测试插入数据:

if __name__=="__main__":
  p = Person(name='小华', birthday=date(1996, 12, 20), is_relative=True)
  p.save()

执行完毕后,表数据多了一行:

测试查询数据:

if __name__=="__main__":
 p = Person.get(Person.name == '小华')
  print(p.name, p.birthday, p.is_relative)

结果:

小华 1996-12-20 True

测试删除数据:

if __name__=="__main__":
  Person.delete().where(Person.name == '小华').execute()

执行后,数据库对应的记录被删除:

测试修改数据:

if __name__ == "__main__":
  p = Person(name='小新', birthday=date(1995, 6, 20), is_relative=False)
  p.save()
  # 更新birthday数据
  q = Person.update({Person.birthday: date(1983, 5, 21)}).where(Person.name == '小新')
  q.execute()

测试批量查询:

if __name__ == "__main__":
  for i in range(1, 5):
    p = Person(name=f'小张{i}', birthday=date(1995, 6, 20), is_relative=False)
    p.save()
  # 查询多条数据
  persons = Person.select().where(Person.is_relative == False)
  for p in persons:
    print(p.name, p.birthday, p.is_relative)

以上就是Python的轻量级ORM框架peewee使用教程的详细内容,更多关于Python的轻量级ORM框架peewee的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python查询mysql中文乱码问题
Nov 09 Python
九步学会Python装饰器
May 09 Python
由浅入深讲解python中的yield与generator
Apr 05 Python
Python更新数据库脚本两种方法及对比介绍
Jul 27 Python
详解python使用Nginx和uWSGI来运行Python应用
Jan 09 Python
python实现飞机大战微信小游戏
Mar 21 Python
python儿童学游戏编程知识点总结
Jun 03 Python
Python代码生成视频的缩略图的实例讲解
Dec 22 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
Jan 03 Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 Python
pycharm永久激活超详细教程
Oct 29 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 #Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 #Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 #Python
python中numpy.empty()函数实例讲解
Feb 05 #Python
解决Pycharm 运行后没有输出的问题
Feb 05 #Python
解决virtualenv -p python3 venv报错的问题
Feb 05 #Python
python如何修改文件时间属性
Feb 05 #Python
You might like
PHP投票系统防刷票判断流程分析
2012/02/04 PHP
laravel安装和配置教程
2014/10/29 PHP
PHP中使用Imagick操作PSD文件实例
2015/01/26 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
jQuery页面刷新(局部、全部)问题分析
2016/01/09 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
Apache如何部署django项目
2017/05/21 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
Python原始套接字编程实例解析
2020/01/29 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
使用Python实现批量ping操作方法
2020/05/06 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
python中pickle模块浅析
2020/12/29 Python
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
回门宴答谢词
2014/01/13 职场文书
公司庆典邀请函范文
2014/01/13 职场文书
学徒工职责
2014/03/06 职场文书
公司业务员岗位职责
2014/03/18 职场文书
融资租赁计划书
2014/04/29 职场文书
大雁塔英文导游词
2015/02/10 职场文书
安全教育第一课观后感
2015/06/17 职场文书
Elasticsearch 聚合查询和排序
2022/04/19 Python