开发者社区> 问答> 正文

python使用redis 神器 ---redisco Model Attributes,py报错

  很久没认真推荐过东西了,实在是人懒也没以前那么有心思去研究新东西,其实本文要推荐的玩意儿也不是自己发现的,是一为技术宅同事瞎逛github后发现推荐给我的。

 

  好了废话不多说,直接进正题。今天我要推荐的是一款python的redis工具。看到这里肯定很多人就要喷了,redis官方本来就有python的第三方库(redis)了为什么还要你来推荐。行,别急,听我先解释redisco的不同点。


redisco:

1)纯pyhton开发而成,你可以直接看它的源码(github地址:https://github.com/iamteem/redisco).

2) 带有redis的所有功能,因为它是基于redis这个官方的库上开发而成的.

3) 可以以django自带orm的方式将数据存入redis,并且提供了大多数和django的orm相同的查询功能.



其实我主要就是要介绍上面的第三点,redisco的 model(django里也叫着名字)类,它提供的这种能让数据以类似python内部的dict或者class的形式存储到redis里,这样我们对 redis的使用就接近nosql数据库了(因为redis自带持久化存储的功能)。


手把手教程范例教程开始:


创建一个你要存进redis的模型,你可以理解为是mysql里的表,需要继承models.Model类


Python代码   收藏代码
  1. from redisco import models  
  2. class Person(models.Model):  
  3.     name = models.Attribute(required=True)  
  4.     created_at = models.DateTimeField(auto_now_add=True)  
  5.     fave_colors = models.ListField(str)  
 

类里面支持的所有数据类型如下:

 


Model Attributes

Attribute Stores unicode strings. If used for large bodies of text, turn indexing of this field off by setting indexed=True. IntegerField Stores an int. Ints are stringified using unicode() before saving to Redis. Counter An IntegerField that can only be accessed via Model.incr and Model.decr. DateTimeField Can store a DateTime object. Saved in the Redis store as a float. DateField Can store a Date object. Saved in Redis as a float. FloatField Can store floats. BooleanField Can store bools. Saved in Redis as 1's and 0's. ReferenceField 可以引用其他的model.Model类,比如可以在一个通讯录类里增加一个字段它的类型是人物这个类他们都继承model.Model类但可以互相引用这样你就可以直接通过 通讯录.人物这样的方式调用(之后的文章会详细介绍) ListField 列表类型,使用跟python的list一样可以将 python里的unicode, int, float和其他redisco.model类放进去 生成一个Person类的数据
 >>person = Person(name="hupu")

   因为name是必填字段所以必须要给


  然后 调用save方法就存储到redis里去了。


>>person.save()
True

返回True就是成功了。



查询刚刚存进去的数据,跟django的orm真的很像

>>conchita = Person.objects.filter(name='hupu')[0]


查询所有的Person

>> all_person = Person.objects.all()


查询age大于某5岁


>> all_person = Person.objects.zfilter(age__gt=5)            小于 就是 字段名__lt 范围 就是 字段名__in=(0,5)


查询范围的都是一个list别忘了[0] 来获得一个结果


最后提一点,redisco.model.Model类存储数据时,对于除了Counter类型以外的所有类型字段有更改比如 person.age = 5 将年龄改为5 都要调用person.save()方法才能更改成功。

 

 

 

 

更多的功能可以看它的测试代码里的例子https://github.com/iamteem/redisco/blob/master/tests/models.py 和 https://github.com/iamteem/redisco  首页的文档。

展开
收起
python小菜菜 2020-05-27 15:25:31 878 0
1 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Redis在唯品会的应用实践——架构演进与功能定制 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载