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字符串的encode与decode研究心得乱码问题解决方法
Mar 23 Python
python日志记录模块实例及改进
Feb 12 Python
Python生成密码库功能示例
May 23 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
May 09 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
python3.5绘制随机漫步图
Aug 27 Python
pyqt5 QProgressBar清空进度条的实例
Jun 21 Python
Python参数类型以及常见的坑详解
Jul 08 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
Django在Model保存前记录日志实例
May 14 Python
Python 操作SQLite数据库的示例
Oct 16 Python
PYTHON InceptionV3模型的复现详解
May 06 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类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python基础教程之自定义函数介绍
2014/08/29 Python
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
详解如何使用Python编写vim插件
2017/11/28 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
pandas创建新Dataframe并添加多行的实例
2018/04/08 Python
Python之修改图片像素值的方法
2019/07/03 Python
简单分析python的类变量、实例变量
2019/08/23 Python
python分布式编程实现过程解析
2019/11/08 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
会计实习生自我鉴定
2013/12/12 职场文书
单位提档介绍信
2014/01/17 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
销售代理协议书
2014/09/30 职场文书
警用民用对讲机找不同
2022/02/18 无线电
Echarts如何重新渲染实例详解
2022/05/30 Javascript