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函数可变参数定义及其参数传递方式实例详解
May 25 Python
wxPython使用系统剪切板的方法
Jun 16 Python
Python判断文本中消息重复次数的方法
Apr 27 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
Python中一行和多行import模块问题
Apr 01 Python
用Python一键搭建Http服务器的方法
Jun 01 Python
对Python 检查文件名是否规范的实例详解
Jun 10 Python
Python自定义一个异常类的方法
Jun 27 Python
python网络爬虫 Scrapy中selenium用法详解
Sep 28 Python
python 将dicom图片转换成jpg图片的实例
Jan 13 Python
python:批量统计xml中各类目标的数量案例
Mar 10 Python
python怎么判断素数
Jul 01 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获取http请求的头信息实现步骤
2012/12/16 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
javascript操作cookie
2017/01/17 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
js实现自动图片轮播代码
2017/03/22 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
用实例分析Python中method的参数传递过程
2015/04/02 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
Python使用三种方法实现PCA算法
2017/12/12 Python
python opencv之分水岭算法示例
2018/02/24 Python
Flask框架信号用法实例分析
2018/07/24 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
python烟花效果的代码实例
2020/02/25 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
《鱼游到了纸上》教学反思
2014/02/20 职场文书
我的画教学反思
2014/04/28 职场文书
神农溪导游词
2015/02/11 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
2015年公路路政个人工作总结
2015/07/24 职场文书
关于五一放假的通知
2015/08/18 职场文书