peewee模块基本使用-ORM

简介: peewee模块基本使用-ORM

image.png

表达式转换

Method  Meaning
.in_(value) IN lookup (identical to <<).
.not_in(value)  NOT IN lookup.
.is_null(is_null)   IS NULL or IS NOT NULL. Accepts boolean param.
.contains(substr)   Wild-card search for substring.
.startswith(prefix) Search for values beginning with prefix.
.endswith(suffix)   Search for values ending with suffix.
.between(low, high) Search for values between low and high.
.regexp(exp)    Regular expression match (case-sensitive).
.iregexp(exp)   Regular expression match (case-insensitive).
.bin_and(value) Binary AND.
.bin_or(value)  Binary OR.
.concat(other)  Concatenate two strings or objects using ||.
.distinct() Mark column for DISTINCT selection.
.collate(collation) Specify column with the given collation.
.cast(type) Cast the value of the column to the given type.
in_(): IN
not_in(): NOT IN
regexp(): REGEXP
is_null(True/False): IS NULL or IS NOT NULL
contains(s): LIKE %s%
startswith(s): LIKE s%
endswith(s): LIKE %s
between(low, high): BETWEEN low AND high
concat(): ||

举例:


SELECT * FROM user WHERE username not like "%admin%"
# ~(User.username.contains('admin'))
SELECT * FROM user WHERE LENGTH(username)>45
# fn.length(User.username) > 45

参考: http://docs.peewee-orm.com/en/latest/peewee/query_operators.html


调用sql函数

使用fn


query = (User
         .select(User.username, fn.COUNT(Tweet.id).alias('ct'))
         .join(Tweet, JOIN.LEFT_OUTER, on=(User.id == Tweet.user_id))
         .group_by(User.username)
         .order_by(fn.COUNT(Tweet.id).desc()))

参考:https://peewee.readthedocs.io/en/latest/peewee/api.html#fn


以下代码参考官方示例


示例代码:


# —*— coding: utf-8 —*—
from peewee import *
import datetime
from chinesename import chinesename
# py2解决编码问题
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
# 设置数据库
db = SqliteDatabase("demo.db")
class BaseModel(Model):
    class Meta:
        database = db
# 定义数据表
class User(BaseModel):
    name = CharField(unique=True)
    def __str__(self):
        return "[user] id: %d  name: %s"%(self.id, self.name)
class Tweet(BaseModel):
    user = ForeignKeyField(User, related_name ="tweets")
    message = TextField()
    created_date = DateTimeField(default=datetime.datetime.now)
    is_published = BooleanField(default=True)
    def __str__(self):
        return "[tweet] id: %d  name: %s" % (self.id, self.user.name)
# 创建数据表
db.connect()
db.create_tables([User, Tweet], safe=True)
db.close()
# 添加数据
def add_data():
    cn = chinesename.ChineseName()
    for i in range(100):
        user = User(name=cn.getName())
        user.save()
        User.create(name=cn.getName())
        Tweet.create(user=user, message="hello world")
# add_data()
print datetime.datetime.now()
print datetime.date.today()
# 查询
ret = User.get(User.name=="沈从")
if ret: print ret
usernames = ["马酿", "沈从"]
users = User.select().where(User.name.in_(usernames))
for user in users:
    print user
tweets = Tweet.select().where(Tweet.user.in_(users))
for tweet in tweets:
    print tweet
tweets = Tweet.select().join(User).where(User.name.in_(usernames))
for tweet in tweets:
    print tweet
count = (Tweet
         .select()
         .where(
            (Tweet.created_date >= datetime.date.today())&
            (Tweet.is_published == True))
         .count())
print count
# 分页 page 3 (users 41-60)
users = User.select().order_by(User.name).paginate(3, 20)
for user in users:
    print user
# 更新
query = User.update(name="西门吹雪").where(User.id==1)
query.execute()
# 删除
query = User.delete().where(User.id==2)
query.execute()
相关文章
|
存储 开发框架 JavaScript
uniapp、vue、小程序、js图片转base64 示例代码
uniapp、vue、小程序、js图片转base64 示例代码
1126 0
|
安全 Java Android开发
SpringBoot 代码混淆方案 ProGuard
在软件开发中,代码混淆是故意创建人类难以理解的源代码或机器代码的行为。代码混淆处理修改了可部署的文件,因此黑客很难从中读取信息,但仍然保持完整的功能。这最初是为 android 平台引入的。它现在能够支持 SpringBoot 2。
|
网络协议 Python
python中socket客户端发送和接收数据
【4月更文挑战第7天】本教程聚焦TCP客户端数据发送与接收。使用Python的`socket`模块,通过`send()`发送字节串至服务器,如`client_socket.send(message_bytes)`;用`recv()`接收数据,如`received_data = client_socket.recv(buffer_size)`。异常处理确保网络错误时程序健壮性,例如`try-except`捕获`socket.error`。理解和掌握这些基础操作对于构建稳定的TCP客户端至关重要。
2707 1
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(三)
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(三)
364 0
|
Rust 前端开发 JavaScript
前端技术新探索:从React到WebAssembly的高效之路
前端技术新探索:从React到WebAssembly的高效之路
423 2
|
前端开发
基于jeecg-boot的flowable流程增加部门经理审批功能
基于jeecg-boot的flowable流程增加部门经理审批功能
519 0
|
Ubuntu Python
Ubuntu 安装Python3.8
Ubuntu 安装Python3.8
1348 0
|
域名解析 存储 网络协议
你知道CDN是什么吗?本文带你搞明白CDN
你知道CDN是什么吗?本文带你搞明白CDN
5817 1
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
1775 5
|
关系型数据库 数据库 开发者
Python中的Peewee框架:轻量级ORM的优雅之旅
【4月更文挑战第13天】在Python的众多ORM框架中,Peewee以其轻量级、简洁和易于上手的特点,受到了许多开发者的青睐。Peewee的设计理念是“小而美”,它提供了基本的ORM功能,同时保持了代码的清晰和高效。本文将深入探讨Peewee的核心概念、使用场景以及实战应用,帮助读者更好地理解和使用这一框架。