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读写Redis数据库操作示例
Mar 18 Python
回调函数的意义以及python实现实例
Jun 20 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
Aug 08 Python
Python 模拟登陆的两种实现方法
Aug 10 Python
Python学习小技巧总结
Jun 10 Python
Matplotlib中文乱码的3种解决方案
Nov 15 Python
python爬取淘宝商品销量信息
Nov 16 Python
Django中使用Celery的方法示例
Nov 29 Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 Python
python关于调用函数外的变量实例
Dec 26 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
golang/python实现归并排序实例代码
Aug 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中使用Select 查询语句的实例
2014/02/19 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
Javascript 二维数组
2009/11/26 Javascript
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
[01:05:29]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第二场 1月24日
2021/03/11 DOTA
Python文件操作类操作实例详解
2014/07/11 Python
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
python中私有函数调用方法解密
2016/04/29 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
python如何制作英文字典
2019/06/25 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
Python实现TCP通信的示例代码
2019/09/09 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
python 画函数曲线示例
2019/12/04 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
北京奥运会口号
2014/06/21 职场文书
二手房购房协议书范本
2014/10/05 职场文书
2014年工程工作总结
2014/11/25 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
2019年入党思想汇报
2019/03/25 职场文书
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android