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 相关文章推荐
urllib2自定义opener详解
Feb 07 Python
Windows下搭建python开发环境详细步骤
Jul 20 Python
python中的插值 scipy-interp的实现代码
Jul 23 Python
python2和python3的输入和输出区别介绍
Nov 20 Python
python 列表中[ ]中冒号‘:’的作用
Apr 30 Python
在python中画正态分布图像的实例
Jul 08 Python
Python socket 套接字实现通信详解
Aug 27 Python
Python-Flask:动态创建表的示例详解
Nov 22 Python
Pytorch在NLP中的简单应用详解
Jan 08 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
Python工程师必考的6个经典面试题
Jun 28 Python
详解Python内置模块Collections
Mar 22 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
文件系统基本操作类
2006/11/23 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
许愿墙中用到的函数
2006/10/07 Javascript
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
[20:57]Ti4主赛事第三天开幕式
2014/07/21 DOTA
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
Python常用正则表达式符号浅析
2014/08/13 Python
python机器学习库常用汇总
2017/11/15 Python
Python生成8位随机字符串的方法分析
2017/12/05 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
如何在pycharm中安装第三方包
2020/10/27 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
REISS英国官网:伦敦High Street最受欢迎品牌
2016/12/21 全球购物
使用索引有什么好处
2016/07/27 面试题
禁烟标语大全
2014/06/11 职场文书
鸟的天堂导游词
2015/01/31 职场文书
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python