python-轻量级ORM库peewee的使用

简介

比较小巧的ORM,支持

  • sqlite
  • mysql
  • postgresql
  • cockroachdb

数据库及表创建

自行创建数据库

CREATE DATABASE peewee_learn

创建与删除表

import datetime
from peewee import MySQLDatabase,Model, CharField, TextField, IntegerField,BooleanField,DateTimeField,UUIDField

my_db = MySQLDatabase(
    'peewee_learn',
    user='root',
    password='123456',
    host='192.168.31.100',
    port=3306
)

class BaseModel(Model):
    id = UUIDField(primary_key=True)
    time = DateTimeField(formats='%Y-%m-%d %H:%M:%S',default=datetime.datetime.now())
    class Meta:
        database = my_db

class Users(BaseModel):
    name=CharField(max_length=20)
    age=IntegerField(null=True)
    gender=BooleanField()
    desc=TextField()

    class Meta:
        db_table = "users"


def create_tables(db,models):
    db.connect()
    db.create_tables(models,safe=True)

def drop_tables(db,models):
    db.connect()
    db.drop_tables(models,safe=True)

if __name__ == '__main__':
    my_models = [Users]
    create_tables(my_db,my_models)
    # drop_tables(my_db,my_models)

在这里插入图片描述
IntegerField()对应的是int类型
CharField()对应的是varchar
DateTimeField()对应的是datetime类型
BooleanField()对应的是tinyint(1)类型

基本操作

def insert(model,**value):
    try:
        o = model()
        for k,v in value.items():
            setattr(o,k,v)
        o.save()
    except Exception as e:
        print(e)

def insert_many(db,model,values:List):
    try:
        with db.atomic():
            q = model.insert_many(values)
            q.execute()
    except Exception as e:
        print(e)

    # 查询所有
    users = Users.select()
    print([u.name for u in users])
    # 按条件查询
    users = Users.select().where(Users.age==18)
    print([u.name for u in users])
    # 排序
    users = Users.select().order_by(Users.age)
    print([u.name for u in users])
    # 函数使用
    cnt = Users.select(fn.Count(Users.id).alias("cnt"))
    print([u.name for u in users])

    users = Users.select().where(Users.age==18)
    u = users[0]
    u.name='liwu'
    u.save()

    # 删除
    users = Users.select().where(Users.age == 20)
    u = users[0]
    u.delete_instance()

全部代码

from typing import List
import uuid
from peeweetest.models import my_db,Users
from peewee import fn

def insert(model,**value):
    try:
        o = model()
        for k,v in value.items():
            setattr(o,k,v)
        o.save()
    except Exception as e:
        print(e)

def insert_many(db,model,values:List):
    try:
        with db.atomic():
            q = model.insert_many(values)
            q.execute()
    except Exception as e:
        print(e)



if __name__ == '__main__':
    # insert test
    zhangsan = {
        "id": uuid.uuid4(),
        "name": "three",
        "age": 18,
        "gender": True,
        "desc": "test for insert"
    }
    # insert(Users,name="four",age=18,gender=True,desc="test for insert")
    # insert_many test
    lisi={
        "id": uuid.uuid4(),
        "name": "four",
        "age": 20,
        "gender": False,
        "desc": "test for insert many"
    }
    insert_many(my_db,Users,[zhangsan,lisi])
    # 查询所有
    users = Users.select()
    print([u.name for u in users])
    # 按条件查询
    users = Users.select().where(Users.age==18)
    print([u.name for u in users])
    # 排序
    users = Users.select().order_by(Users.age)
    print("sql:",users)
    print([u.name for u in users])
    # 函数使用
    cnt = Users.select(fn.Count(Users.id).alias("cnt"))
    print([u.name for u in users])
    # 修改
    users = Users.select().where(Users.age==18)
    u = users[0]
    u.name='liwu'
    u.save()
    # 删除
    users = Users.select().where(Users.age == 20)
    u = users[0]
    u.delete_instance()

select的太多,无法列举,可以看看文档,打印出sql语句

参考

github-peewee
peewee-docs

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lady_killer9

感谢您的打赏,我会加倍努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值