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实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
python脚本内运行linux命令的方法
Jul 02 Python
python删除特定文件的方法
Jul 30 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
python学生管理系统代码实现
Apr 05 Python
NLTK 3.2.4 环境搭建教程
Sep 19 Python
python读取目录下最新的文件夹方法
Dec 24 Python
Python中单线程、多线程和多进程的效率对比实验实例
May 14 Python
python爬虫之爬取百度音乐的实现方法
Aug 24 Python
tensorflow之自定义神经网络层实例
Feb 07 Python
python topk()函数求最大和最小值实例
Apr 02 Python
pip install命令安装扩展库整理
Mar 02 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
PHILIPS AE3805收音机的分析打磨
2021/03/02 无线电
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
JavaScript进阶教程(第四课第一部分)
2007/04/05 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
2014/08/18 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
Vue.js每天必学之计算属性computed与$watch
2016/09/05 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
JS求解三元一次方程组值的方法
2017/01/03 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
Python中用sleep()方法操作时间的教程
2015/05/22 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
python2 对excel表格操作完整示例
2020/02/23 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
幼儿园教师国培感言
2014/02/02 职场文书
搞笑爱情保证书
2014/04/29 职场文书
教师求职自荐书
2014/06/14 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
意外伤害赔偿协议书范本
2014/09/28 职场文书
给朋友的赠语
2015/06/23 职场文书
运动会加油稿50字
2015/07/21 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
Python 用户输入和while循环的操作
2021/05/23 Python
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python