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进阶教程之异常处理
Aug 30 Python
深入理解Python中命名空间的查找规则LEGB
Aug 06 Python
Python序列化基础知识(json/pickle)
Oct 19 Python
Python实现PS滤镜功能之波浪特效示例
Jan 26 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
Python3 ffmpeg视频转换工具使用方法解析
Aug 10 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 17 Python
通俗易懂了解Python装饰器原理
Sep 17 Python
anaconda升级sklearn版本的实现方法
Feb 22 Python
Python Flask请求扩展与中间件相关知识总结
Jun 11 Python
python Tkinter模块使用方法详解
Apr 07 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
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
Laravel 5框架学习之Laravel入门和新建项目
2015/04/07 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
php创建图像具体步骤
2017/03/13 PHP
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
2017/12/16 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
python框架django基础指南
2016/09/08 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
VSCode Python开发环境配置的详细步骤
2019/02/22 Python
python实现代码统计器
2019/09/19 Python
python numpy数组中的复制知识解析
2020/02/03 Python
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
新书吧创业计划书
2014/01/31 职场文书
水电工岗位职责
2014/02/12 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
促销活动方案模板
2014/02/24 职场文书
表彰会主持词
2014/03/26 职场文书
入党推优材料
2014/06/02 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
2015年派出所工作总结
2015/04/24 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
MySQL的安装与配置详细教程
2021/06/26 MySQL