0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Python 轻量级ORM框架

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-11-01 11:17 次阅读

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)

执行后:

图片

结果:

小新 1983-05-21 False
小张1 1995-06-20 False
小张2 1995-06-20 False
小张3 1995-06-20 False
小张4 1995-06-20 False

更多用法可参考官方文档。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 框架
    +关注

    关注

    0

    文章

    403

    浏览量

    17478
  • 数据库
    +关注

    关注

    7

    文章

    3795

    浏览量

    64366
  • python
    +关注

    关注

    56

    文章

    4793

    浏览量

    84634
  • Django
    +关注

    关注

    0

    文章

    44

    浏览量

    10379
收藏 人收藏

    评论

    相关推荐

    一个面向嵌入式系统的轻量级框架

    mr-library 是一个面向嵌入式系统的轻量级框架,提供统一的底层驱动设备模型以及基础服务功能,具有模块化设计、可配置性和扩展性的特点, 可帮助开发者快速构建嵌入式应用程序。
    发表于 09-01 12:22 580次阅读

    Python爬虫与Web开发库盘点

    类,如BaseSpider、sitemap爬虫等3.Web框架Django算是Python web框架里重量级的选手,主要是因为它提供了一站式的解决方案,包括缓存、
    发表于 05-10 15:21

    10个轻量级框架

    这些轻量级框架使用HTML5和CSS3标准来帮助您快速开发跨平台的Web移动应用和网站。
    发表于 07-17 08:25

    轻量级深度学习网络是什么

    轻量级深度学习网络概览
    发表于 04-23 14:53

    轻量级的ui框架如何去制作

    原创分享:自制轻量级单片机UI框架框架元素用户接口代码开源平时常看csdn,但是从来没有自己写过。正好这几天需要用单片机做一个简易的ui界面,于是自己写了一个轻量级的ui
    发表于 07-14 07:39

    Dllite_micro (轻量级的 AI 推理框架

    DLLite-Micro 是一个轻量级的 AI 推理框架,可以为 OpenHarmony OS 的轻量设备和小型设备提供深度模型的推理能力DLLite-Micro 向开发者提供清晰、易上手的北向接口
    发表于 08-05 11:40

    如何自制轻量级单片机UI框架

    如何自制轻量级单片机UI框架
    发表于 10-14 06:13

    原创分享:自制轻量级单片机UI框架

    原创分享:自制轻量级单片机UI框架框架元素用户接口代码开源平时常看csdn,但是从来没有自己写过。正好这几天需要用单片机做一个简易的ui界面,于是自己写了一个轻量级的ui
    发表于 11-05 15:20 29次下载
    原创分享:自制<b class='flag-5'>轻量级</b>单片机UI<b class='flag-5'>框架</b>

    TinyDB轻量级数据库有哪些特点呢

    TinyDB 是一个纯 Python 编写的轻量级数据库,一共只有1800行代码,没有外部依赖项。
    的头像 发表于 10-28 14:07 1460次阅读

    SQLAlchemy 2.0.0正式发布,Python ORM框架

    SQLAlchemy 是一个 Python 的 SQL 工具包以及数据库对象映射 (ORM) 框架。它包含整套企业级持久化模式,专门用于高效和高性能的数据库访问。
    的头像 发表于 01-31 14:52 470次阅读

    一个纯Python编写的轻量级数据库

    TinyDB 是一个纯 Python 编写的轻量级数据库,一共只有1800行代码,没有外部依赖项。
    的头像 发表于 02-24 10:32 825次阅读

    测评分享 | 如何在先楫HPM6750上运行轻量级AI推理框架TinyMaix

    本期内容由先楫开发者社区大咖@xusiwei1236分享基于先楫HPM6750的轻量级AI推理框架,赶紧来瞧瞧~一、TinyMaix是什么?TinyMaix是国内sipeed团队开发一个轻量级AI
    的头像 发表于 12-12 17:57 1569次阅读
    测评分享 | 如何在先楫HPM6750上运行<b class='flag-5'>轻量级</b>AI推理<b class='flag-5'>框架</b>TinyMaix

    一个轻量级的权限认证框架:Sa-Token

    Java有很多优秀的权限认证框架,如 Apache Shiro 、 Spring Security 等,但是集成起来实在是有些复杂;今天给大家介绍一个轻量级的权限认证框架:Sa-Token,只需引入
    的头像 发表于 09-30 16:46 2070次阅读
    一个<b class='flag-5'>轻量级</b>的权限认证<b class='flag-5'>框架</b>:Sa-Token

    Mara-pipelines:轻量级的数据转换框架

    Mara-pipelines 是一个轻量级的数据转换框架,具有透明和低复杂性的特点。其他特点如下: 基于非常简单的Python代码就能完成流水线开发。 使用 PostgreSQL 作为数据处理引擎
    的头像 发表于 10-30 10:47 609次阅读
    Mara-pipelines:<b class='flag-5'>轻量级</b>的数据转换<b class='flag-5'>框架</b>

    超级方便的轻量级Python流水线工具

    Mara-pipelines 是一个轻量级的数据转换框架,具有透明和低复杂性的特点。其他特点如下: 基于非常简单的Python代码就能完成流水线开发。 使用 PostgreSQL 作为数据处理引擎
    的头像 发表于 10-31 11:26 678次阅读
    超级方便的<b class='flag-5'>轻量级</b><b class='flag-5'>Python</b>流水线工具