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()
相关文章
|
存储 关系型数据库 数据库
Django创建应用、ORM的进阶使用及模型类数据库迁移1
Django创建应用、ORM的进阶使用及模型类数据库迁移1
128 0
|
关系型数据库 MySQL 数据库
Django创建应用、ORM的进阶使用及模型类数据库迁移2
Django创建应用、ORM的进阶使用及模型类数据库迁移2
92 0
|
存储 数据可视化 数据库
Django创建应用、ORM的进阶使用及模型类数据库迁移3
Django创建应用、ORM的进阶使用及模型类数据库迁移3
89 0
|
8月前
|
API 数据库 Python
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
381 1
|
8月前
|
SQL 存储 前端开发
Django框架ORM操作(一)
Django框架ORM操作(一)
113 0
Django框架ORM操作(一)
|
8月前
|
Oracle 关系型数据库 MySQL
Django框架ORM操作(二)
Django框架ORM操作(二)
102 0
|
8月前
|
SQL API 数据库
一篇文章带你了解Django ORM操作
一篇文章带你了解Django ORM操作
88 0
|
8月前
|
SQL 关系型数据库 MySQL
python-轻量级ORM库peewee的使用
python-轻量级ORM库peewee的使用
69 0
|
SQL 数据库 Python
django -- ORM实现作者增删改查
django -- ORM实现作者增删改查
|
存储 SQL Oracle
Django ORM基本应用与原理剖析
1.ORM构建数据表 由于每一个数据表对应一个Model定义,每一个Model都是一个Python类,所以,Model之间是可以继承的。Django规定,所有的Model都必须继承自django.db.models.Model
293 1
Django ORM基本应用与原理剖析