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 正则表达式(转义问题)
Dec 15 Python
Mac下Supervisor进程监控管理工具的安装与配置
Dec 16 Python
python中Flask框架简单入门实例
Mar 21 Python
在Python中使用全局日志时需要注意的问题
May 06 Python
Python在线运行代码助手
Jul 15 Python
Python数字图像处理之霍夫线变换实现详解
Jan 12 Python
Python对接 xray 和微信实现自动告警
Sep 17 Python
python实现俄罗斯方块游戏(改进版)
Mar 13 Python
Python基于pyjnius库实现访问java类
Jul 31 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 Python
如何利用python和DOS获取wifi密码
Mar 31 Python
深入解析NumPy中的Broadcasting广播机制
May 30 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正则表达式中的非贪婪模式匹配的使用
2014/11/25 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
实例详解带参数的 npm script
2019/05/28 Javascript
el-select数据过多懒加载的解决(loadmore)
2019/05/29 Javascript
使用python将mdb数据库文件导入postgresql数据库示例
2014/02/17 Python
pycharm 使用心得(五)断点调试
2014/06/06 Python
用Python编写简单的定时器的方法
2015/05/02 Python
以windows service方式运行Python程序的方法
2015/06/03 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
django之常用命令详解
2016/06/30 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
给老婆的搞笑检讨书
2014/01/12 职场文书
旅游专业职业生涯规划范文
2014/01/13 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
教师个人读书活动总结
2014/07/08 职场文书
校庆团日活动总结
2014/08/28 职场文书
2014年银行工作总结范文
2014/11/12 职场文书