python-轻量级ORM库peewee的使用

简介: 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

相关文章
|
3月前
|
JavaScript 前端开发 Java
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
929 103
|
13天前
|
JSON 网络安全 数据格式
Python网络请求库requests使用详述
总结来说,`requests`库非常适用于需要快速、简易、可靠进行HTTP请求的应用场景,它的简洁性让开发者避免繁琐的网络代码而专注于交互逻辑本身。通过上述方式,你可以利用 `requests`处理大部分常见的HTTP请求需求。
131 51
|
6月前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
249 20
|
1月前
|
JSON 数据格式 Python
解决Python requests库POST请求参数顺序问题的方法。
总之,想要在Python的requests库里保持POST参数顺序,你要像捋顺头发一样捋顺它们,在向服务器炫耀你那有条不紊的数据前。抓紧手中的 `OrderedDict`与 `json`这两把钥匙,就能向服务端展示你的请求参数就像经过高端配置的快递包裹,里面的商品摆放井井有条,任何时候开箱都是一种享受。
58 10
|
1月前
|
XML JSON 安全
分析参数顺序对Python requests库进行POST请求的影响。
最后,尽管理论上参数顺序对POST请求没影响,但编写代码时仍然建议遵循一定的顺序和规范,比如URL总是放在第一位,随后是data或json,最后是headers,这样可以提高代码的可读性和维护性。在处理复杂的请求时,一致的参数顺序有助于调试和团队协作。
95 9
|
6月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
252 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
5月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
158 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
7月前
|
XML JSON 数据库
Python的标准库
Python的标准库
279 77
|
5月前
|
Web App开发 数据采集 数据安全/隐私保护
Selenium库详解:Python实现模拟登录与反爬限制的进阶指南
Selenium库详解:Python实现模拟登录与反爬限制的进阶指南
|
6月前
|
关系型数据库 API 数据库
Python流行orm框架对比
Python中有多个流行的ORM框架,如SQLAlchemy、Django ORM、Peewee、Tortoise ORM、Pony ORM、SQLModel和GINO。每个框架各有特点,适用于不同的项目需求。SQLAlchemy功能强大且灵活,适合复杂项目;Django ORM与Django框架无缝集成,易用性强;Peewee轻量级且简单,适合小型项目;Tortoise ORM专为异步框架设计;Pony ORM查询语法直观;SQLModel结合Pydantic,适合FastAPI;GINO则适合异步环境开发。初学者推荐使用Django ORM或Peewee,因其易学易用。
575 4

热门文章

最新文章

推荐镜像

更多