简单的django queryset,就像dict queryer

mysdq的Python项目详细描述


https://travis-ci.org/josuebrunel/mysdq.svg?branch=masterhttps://coveralls.io/repos/github/josuebrunel/MySDQ/badge.svg?branch=masterhttp://pepy.tech/badge/mysdq

mysdq是一个简单的dictionary queryer查询程序,其api接近django queryset

它旨在快速地处理一些json/dict数据。

它支持operator模块中的所有运算符(是的,甚至是那些不起作用的运算符)。

使用时请考虑django queryset

安装

pipinstallmysdq

快速启动

这里使用的数据可以在here中找到

In[1]:importjsonIn[2]:data=json.load(open('tests/users.json'))In[3]:frommysdqimportDictQuererIn[4]:qs=DictQuerer(data)In[5]:qs.count()==7Out[5]:TrueIn[8]:qs.get(nickname='yloking')Out[8]:{'address':{'city':'Paris','name':'rue du chatea','num':169,'zipcode':'75014'},'age':25,'firstname':'yosuke','lastname':'loking','nickname':'yloking','profiles':[{'name':'twitter','url':'https://twitter.com/yloking/','username':'yloking'},{'name':'github','url':'https://github.com/yloking/','username':'yloking'},{'name':'reddit','url':'https://reddit.com/yloking/','username':'yloking'}]}# Querying non matching entry returns NoneIn[9]:qs.get(lastname='young',age__le=20)# Querying an entry and requesting only 2 attributesIn[11]:qs.filter(lastname='young',age__gt=20).values('nickname','age')Out[11]:[{'age':35,'nickname':'kyoung'}]# Querying a sub keyIn[12]:qs.filter(address__zipcode='44000').values('nickname','age','address')Out[12]:[{'address':{'city':'Nantes','name':'cheval blanc','num':12,'zipcode':'44000'},'age':35,'nickname':'kyoung'}]# Querying a item in a listIn[13]:qs.filter(profiles__0__url__contains='kwame')Out[13]:[{'age':24,'nickname':'kkwame','profiles':[{'name':'twitter','url':'https://twitter.com/kkwame/','username':'kkwame'},{'name':'github','url':'https://github.com/kkwame/','username':'kkwame'},{'name':'reddit','url':'https://reddit.com/kkwame/','username':'kkwame'}]}]# Ordering by attributeIn[14]:qs.order_by('age').values('nickname','age')Out[14]:[{'age':15,'nickname':'tblack'},{'age':24,'nickname':'kkwame'},{'age':25,'nickname':'yloking'},{'age':25,'nickname':'jrodriguez'},{'age':28,'nickname':'jkouka'},{'age':32,'nickname':'dmccrey'},{'age':35,'nickname':'kyoung'}]# Grouping by attributeIn[16]:res=qs.group_by('age')In[17]:assertlen(res[25])==2In[18]:len(res[25])Out[18]:2# Apply a function to an attributeIn[19]:qs.apply(lambdax:x*2,'age').values('nickname','age')Out[19]:[{'age':30,'nickname':'tblack'},{'age':48,'nickname':'kkwame'},{'age':50,'nickname':'yloking'},{'age':50,'nickname':'jrodriguez'},{'age':56,'nickname':'jkouka'},{'age':64,'nickname':'dmccrey'},{'age':70,'nickname':'kyoung'}]

差不多了。有关更多筛选器属性,请检查代码:wink:。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
加密如何在Java中使用Skipjack(skip32)将数据库中的顺序整数随机化   java Android在两个活动之间传递数据获取NullPointerException   在构造函数中传递的java上下文显示错误   java将密钥添加到选定的密钥集   javascript为什么带有特殊字符的字符串在GET和POST方法中的行为不同?   java将反射。方法创建一个函数接口   设置Javasocket的端口   java通过一次按键调用MenuItem   java和引擎加载图形:为什么我的背景纹理很小,而且是颠倒的   如何将UV纹理从blender加载到opengl 安卓 java   跨Java虚拟机实现的jvm Java toString表示?   spring在Java服务器页面的上下文中这叫什么?