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的curses库使用教程
Apr 11 Python
Python 两个列表的差集、并集和交集实现代码
Sep 21 Python
Python实现Kmeans聚类算法
Jun 10 Python
python利用thrift服务读取hbase数据的方法
Dec 27 Python
Flask项目中实现短信验证码和邮箱验证码功能
Dec 05 Python
Pycharm最新激活码2019(推荐)
Dec 31 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
Jan 10 Python
Python chardet库识别编码原理解析
Feb 18 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
Mar 05 Python
Python类和实例的属性机制原理详解
Mar 21 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
Jun 24 Python
python遍历路径破解表单的示例
Nov 21 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
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
概述BootStrap中role="form"及role作用角色
2016/12/08 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
python 换位密码算法的实例详解
2017/07/19 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
python解决字符串倒序输出的问题
2018/06/25 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
2019/07/14 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
C#软件工程师英语面试题
2015/06/07 面试题
优秀实习自我鉴定
2013/12/04 职场文书
教师岗位职责范本
2013/12/29 职场文书
物流专业自荐信
2014/05/23 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
授权委托书公证
2014/09/14 职场文书
面试感谢信范文
2015/01/22 职场文书
2019公司管理制度
2019/04/19 职场文书
Python函数对象与闭包函数
2022/04/13 Python