Redis 的ORM框架 Walrus的使用
安装
pip install walrus
创建简单的映射关系
import walrus
"""创建db实例"""
db = walrus.Database(host='192.168.1.7', port=6379, db=0, )
"""哈希对象"""
# 定义一个映射关系
user = db.Hash('user')
# 设置键值对
user['name'] = 'Alice'
user['age'] = 30
# 获取某个键的值,并将其从二进制格式转换为字符串
name = user['name'].decode()
age = user['age'].decode()
# 打印结果
print(name) # 输出:'Alice'
print(age) # 输出:'30'
# 获取所有键
keys = user.keys()
print(keys)
# 删除对象
user.clear()
"""列表对象"""
# 创建一个名为 "mylist" 的新列表对象
mylist = db.List('mylist')
# 向列表中添加元素
mylist.append('foo')
mylist.append('bar')
mylist.append('mek')
# 通过索引获取列表中的元素
print(mylist[0]) # 输出:"foo"
print(mylist[1]) # 输出:"bar"
# 获取列表中的所有元素
all_elements = mylist.as_list()
print(all_elements)
# 获得指定元素
print(mylist[0])
# 从左弹出
print(mylist.popleft())
# 从右弹出
print(mylist.popright())
# 清空列表
mylist.clear()
# 删库
db.flushdb()
抽象的映射关系
创建类
from walrus import *
import Mek_master as Mm
"""创建db实例"""
db = Database(host='192.168.1.7', port=6379, db=0, )
class User(Model):
__database__ = db
id = AutoIncrementField(primary_key=True)
g = FloatField(default=3.14)
f = IntegerField(default=lambda: Mm.get_random_numbe(4),index=True)
name = TextField(index=True)
dob = DateField(index=True)
# 支持的数据类型
"""
**字段可用数据类型**
AutoIncrementField 自增整数
IntegerField 整数
FloatField 浮点
TextField 文本
DateField 日期
DateTimeField 日期和时间
ByteField 字节
BooleanField 布尔
UUIDField UUID
JSONField JSON数据
HashField 哈希
ListField 列表
"""
字段可选参数
"""
primary_key=True 主键
default=3.14 默认值
index=True 添加索引
"""
插入数据
# 创建对象后保存
john = User(name='John', dob=datetime.date(1997, 12, 31))
john.save()
# 直接创建对象
User.create(name='Mary', dob=datetime.date(1980, 3, 4))
查询记录
*注意:只有 index=True 的字段才能被查询
# 通过主键查找对象
user = User.load(1)
print(user.name)
# 通过字段查找单个对象
mek = User.get(User.name == 'mek')
print(mek.name)
# 通过条件查询多个对象
sl = User.query(User.g == 3.14, order_by=User.f)
for user in sl:
print(user.name)
# order_by=User.f 排序判断式
# 多条件组合查询
expr = (User.name == 'ONMCBCK') | (User.name == 'JGVUVSI')
for user in User.query(expr, order_by=User.f):
print(user.id, user.name, user.g, user.dob, user.f)
# 查找全部记录
for user in User.all():
print(user.name)
修改记录
# 修改字段属性后直接保存
mek = User.get(User.name == 'mek')
mek.name = 'mek2'
mek.save()
删除记录
# 删除单条记录
mek = User.get(User.name == 'mek2')
mek.delete()
# 批量删除
for user in User.all():
user.delete()
# 清空数据库 慎用
db.flushdb()