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 15 Python
简单介绍Python的Django框架加载模版的方式
Jul 20 Python
Python字符串处理实例详解
May 18 Python
python之PyMongo使用总结
May 26 Python
Python使用Selenium爬取淘宝异步加载的数据方法
Dec 17 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
pyqt5 实现多窗口跳转的方法
Jun 19 Python
使用Python Pandas处理亿级数据的方法
Jun 24 Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 Python
python 实现朴素贝叶斯算法的示例
Sep 30 Python
Python pymysql模块安装并操作过程解析
Oct 13 Python
python 如何读、写、解析CSV文件
Mar 03 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
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
2015/04/06 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
javascript实现小型区块链功能
2019/04/03 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
React路由鉴权的实现方法
2019/09/05 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
利用Django模版生成树状结构实例代码
2019/05/19 Python
Python3+Appium安装使用教程
2019/07/05 Python
python tkinter canvas使用实例
2019/11/04 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
通过代码实例了解Python sys模块
2020/09/14 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
高中毕业生自我鉴定
2013/11/03 职场文书
校长师德表现自我评价
2015/03/04 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
一文搞懂php的垃圾回收机制
2021/06/18 PHP