Python中的ORM工具:Peewee

上一篇文章介绍了Pyhton中的ORM工具:SQLAlchemy。本文延续之前的风格,介绍另一个ORM模块:Peewee,希望通过简单的CRUD示例可以帮助大家快速上手。

环境说明

  • python v3.6.5
  • peewee v3.7.0
  • faker v0.9.1(生成伪造数据)

安装环境

    pip install peewee faker

CRUD示例

同样的,Peewee也支持绝大多数关系型数据库,示例中使用的是PostgreSQL,用法及说明大多已在源代码中注释,请具体参考如下:

from peewee import *
from faker import Factory
from datetime import datetime

# Create an instance of a Database
db = PostgresqlDatabase(database="postgres", host="localhost",
                        port=5432, user="postgres", password="password", )


# Define a model class
class User(Model):
    # If none of the fields are initialized with primary_key=True,
    # an auto-incrementing primary key will automatically be created and named 'id'.
    id = PrimaryKeyField()
    email = CharField(index=True, max_length=64)
    username = CharField(unique=True, max_length=32)
    password = CharField(null=True, max_length=64)
    createTime = DateTimeField(column_name="create_time", default=datetime.now)

    class Meta:
        database = db
        table_name = 'tb_user'
        # If Models without a Primary Key
        # primary_key = False

    def __str__(self) -> str:
        return "User(id:{} email:{} username:{} password:{} createTime: {})".format(
            self.id, self.email, self.username, self.password, self.createTime)


db.connect()
db.drop_tables([User])
db.create_tables([User])

""" CREATE """

# 创建User对象
user = User(email="zs@123.com", username="张三", password="zs")
# 保存User
user.save()

# 创建faker工厂对象
faker = Factory.create()
# 利用faker创建多个User对象
fake_users = [{
    'username': faker.name(),
    'password': faker.word(),
    'email': faker.email(),
} for i in range(5)]
# 批量插入
User.insert_many(fake_users).execute()

""" RETRIEVE/GET/FIND """

user = User().select().where(User.id != 1).get()
print(user)
user = User.select().where(User.username.contains("张")).get()
print(user)
count = User.select().filter(User.id >= 3).count()
print(count)
users = User.select().order_by(User.email)
for u in users:
    print(u)

""" UPDATE """

effect_count = User.update({User.username: "李四", User.email: "ls@163.com"}).where(User.id == 1).execute()
print(effect_count)

""" DELETE """

effect_count = User().delete_by_id(6)
print(effect_count)
effect_count = User.delete().where(User.id >= 4).execute()
print(effect_count)

参考链接

peewee 3.7.0 documentation

示例源码 欢迎关注我的个人公众号:超级码里奥 如果这对您有帮助,欢迎点赞和分享,转载请注明出处

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JAVA高级架构

Java面试分享(题目+答案)

41030
来自专栏黑泽君的专栏

day32_Hibernate学习笔记_04

  缓存(Cache):是计算机领域非常通用的概念。它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写硬盘(永久性数...

10520
来自专栏腾讯数据库技术

一个ext4的Bug分析过程

1.2K20
来自专栏yukong的小专栏

​【SpringBoot2.0系列06】SpringBoot之多数据源动态切换数据源

【SpringBoot2.0系列02】SpringBoot之使用Thymeleaf视图模板

92370
来自专栏magicsoar

html5利用websocket完成的推送功能(tomcat)

利用websocket和java完成的消息推送功能,服务器用的是tomcat7.0.42,一些东西是自己琢磨的,也不知道恰不恰当,不恰当处,还请各位见谅,并指出...

55460
来自专栏小筱月

Maven 搭建 SSM 项目 (oracle) 设计模式、三层架构的讲解

简单谈一下maven搭建 ssm 项目 (使用数据库oracle,比 mysql 麻烦一点,所以这里谈一下)

38920
来自专栏gnnngu

经典Java面试题收集(二)

答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会...

977200
来自专栏大魏分享(微信公众号:david-share)

应用对持久数据的管理 | 从开发角度看应用架构7

当应用程序将数据存储在永久性存储中(例如flat file,XML文件或数据库的持久性数据)时,它被称为数据的持久性。 关系数据库是企业应用程序用来保存数据以供...

13140
来自专栏Gaussic

使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置 顶

访问GitHub下载最新源码:https://github.com/gaussic/SpringMVCDemo

11220
来自专栏Java技术栈

给你一份超详细 Spring Boot 知识清单

在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架。或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用。因而Spri...

16320

扫码关注云+社区

领取腾讯云代金券