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抓取网页图片并放到指定文件夹
Apr 24 Python
Python编程语言的35个与众不同之处(语言特征和使用技巧)
Jul 07 Python
Python调用C语言开发的共享库方法实例
Mar 18 Python
用Python进行一些简单的自然语言处理的教程
Mar 31 Python
在Python的Django框架中用流响应生成CSV文件的教程
May 02 Python
Python编程实现及时获取新邮件的方法示例
Aug 10 Python
使用python对excle和json互相转换的示例
Oct 23 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
Dec 07 Python
Python数据可视化库seaborn的使用总结
Jan 15 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 Python
python交易记录链的实现过程详解
Jul 03 Python
Scrapy 配置动态代理IP的实现
Sep 28 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
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
php通过ajax实现双击table修改内容
2014/04/28 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
JavaScript函数、方法、对象代码
2008/10/29 Javascript
Javascript var变量隐式声明方法
2009/10/19 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
使用jQuery在对象中缓存选择器的简单方法
2015/06/30 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
js实现碰撞检测特效代码分享
2016/10/16 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
微信小程序签到功能
2018/10/31 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
python分割文件的常用方法
2014/11/01 Python
使用Python编写简单的画图板程序的示例教程
2015/12/08 Python
Python反射用法实例简析
2017/12/22 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
python图形开发GUI库wxpython使用方法详解
2020/02/14 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
HTML5制作表格样式
2016/11/15 HTML / CSS
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
中药专业大学生医药工作求职信
2013/10/25 职场文书
电子商务网站的创业计划书
2014/01/05 职场文书
班级标语大全
2014/06/21 职场文书
店面出租协议书范本
2014/11/28 职场文书
酒店温馨提示语
2015/07/14 职场文书
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers
Java界面编程实现界面跳转
2022/06/16 Java/Android