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自定义函数的创建、调用和函数的参数详解
Mar 11 Python
使用优化器来提升Python程序的执行效率的教程
Apr 02 Python
Python中subprocess的简单使用示例
Jul 28 Python
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
Python彩色化Linux的命令行终端界面的代码实例分享
Jul 02 Python
Selenium鼠标与键盘事件常用操作方法示例
Aug 13 Python
python里 super类的工作原理详解
Jun 19 Python
Python 导入文件过程图解
Oct 15 Python
nginx搭建基于python的web环境的实现步骤
Jan 03 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
Sep 28 Python
Python 里最强的地图绘制神器
Mar 01 Python
Python实战之疫苗研发情况可视化
May 18 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+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
php简单静态页生成过程
2008/03/27 PHP
php开启openssl的方法
2014/05/15 PHP
PHP开发注意事项总结
2015/02/04 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
php实现留言板功能
2017/03/05 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
javascript prototype原型操作笔记
2009/12/07 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
js实现下一页页码效果
2017/03/07 Javascript
Vue中使用webpack别名的方法实例详解
2018/06/19 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
python mysqldb连接数据库
2009/03/16 Python
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python单元测试实例详解
2018/05/25 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
python实现经典排序算法的示例代码
2021/02/07 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
新闻专业本科生的自我评价分享
2013/11/20 职场文书
小车司机岗位职责
2013/11/25 职场文书
酒店总经理工作职责
2013/12/13 职场文书
俞敏洪励志演讲稿
2014/04/29 职场文书
妈妈活动方案
2014/08/15 职场文书
学校办公室主任岗位职责
2015/04/01 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
经典励志格言:每日一句,让你每天充满能量
2019/08/16 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers