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 26 Python
使用Python简单的实现树莓派的WEB控制
Feb 18 Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python随机生成手机号、数字的方法详解
Jul 21 Python
单链表反转python实现代码示例
Feb 08 Python
使用python进行文本预处理和提取特征的实例
Jun 05 Python
Python面向对象之类的定义与继承用法示例
Jan 14 Python
opencv与numpy的图像基本操作
Mar 08 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
Nov 01 Python
Python xpath表达式如何实现数据处理
Jun 13 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
Python机器学习之底层实现KNN
Jun 20 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中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
js活用事件触发对象动作
2008/08/10 Javascript
js 字符串转化成数字的代码
2011/06/29 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
python文件操作之目录遍历实例分析
2015/05/20 Python
Python-嵌套列表list的全面解析
2016/06/08 Python
Python中的字符串替换操作示例
2016/06/27 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
债务纠纷起诉书
2015/05/20 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
利用Redis实现点赞功能的示例代码
2022/06/28 Redis