博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python脚本--利用运算符重载简化MongoDB的命令
阅读量:7252 次
发布时间:2019-06-29

本文共 2940 字,大约阅读时间需要 9 分钟。

因为每次输入MongoDB的命令都很复杂,老把自己绕迷糊了,所以写了这个小脚本

哪里有不正确,请多多指正。新手求教

class ff(object):    def __init__(self,qq):        self.qq = qq    def __gt__(self,qq):# >        return ff({
'$gt':{self.qq:qq.qq}}) def __lt__(self,qq):# < return ff({
'$lt':{self.qq:qq.qq}}) def __eq__(self,qq):# == return ff({
'$eq':{self.qq:qq.qq}}) def __and__(self,qq):# & return ff({
'$and':[self.qq,qq.qq]}) def __or__(self,qq):# | return ff({
'$or':[self.qq,qq.qq]}) def __le__(self, qq): # self <= rhs 小于等于 return ff({
'$lte':{self.qq:qq.qq}}) def __ge__(self, qq):# self >= rhs 大于等于 return ff({
'$gte':{self.qq:qq.qq}}) def __ne__(self, qq): # self != rhs 不等于 return ff({
'$ne':{self.qq:qq.qq}}) def __ior__(self, qq):# self |= rhs 即不也不 return ff({
'$nor':[self.qq,qq.qq]}) def __invert__(self):# ~self 取反 return ff({
'$not':self.qq}) # 类方法,将所有变量变成类ff类型的变量,以便于使用运算符重载 @classmethod def oo(als,a): i = 0 b = '' c = '' while i < len(a): if a[i] not in "~!&|()><=": while True: if i == len(a)-1: c += a[i] b += 'ff(' + c + ')' i+=1 break elif a[i] in "~!&|()><=": if c: b += 'ff(' + c + ')' c = '' break c += a[i] i += 1 else: b += a[i] i+=1 # print(b) # 查看 return eval(b).qq# a = "'age'>1"# print(ff.oo(a))# a = "('age'!=12)"# print(ff.oo(a))# a = "('age'==12)"# print(ff.oo(a))# a = "('age'>23)|('age'<12)"# print(ff.oo(a))# a = "('age'>12)&('age'<23)"# print(ff.oo(a))# a = "~(('age'>12)&('age'<23))"# print(ff.oo(a))# a = "(('age'>12)&('age'<23))|('score'>90)"# print(ff.oo(a))if __name__ == '__main__': print("每个运算单独用括号括起来,例如:(('age'>12)&('age'<23))|('score'>90)\n按ctrl + c 结束本程序",) print() while True: a = input("请输入:") try: print(ff.oo(a)) except: print("输入有误,请检查!")复制代码
a = "'age'>1"print(ff.oo(a))		# {'$gt': {'age': 1}}a = "('age'!=12)"print(ff.oo(a))		# {'$ne': {'age': 12}}a = "('age'==12)"print(ff.oo(a))		# {'$eq': {'age': 12}}a = "('age'>23)|('age'<12)"print(ff.oo(a))		# {'$or': [{'$gt': {'age': 23}}, {'$lt': {'age': 12}}]}a = "('age'>12)&('age'<23)"print(ff.oo(a))		# {'$and': [{'$gt': {'age': 12}}, {'$lt': {'age': 23}}]}a = "~(('age'>12)&('age'<23))"print(ff.oo(a))		# {'$not': {'$and': [{'$gt': {'age': 12}}, {'$lt': {'age': 23}}]}}a = "(('age'>12)&('age'<23))|('score'>90)"print(ff.oo(a))		# {'$or': [{'$and': [{'$gt': {'age': 12}}, {'$lt': {'age': 23}}]}, {'$gt':{'score': 90}}]}复制代码

转载请注明出处

转载于:https://juejin.im/post/5badf6886fb9a05d07194cff

你可能感兴趣的文章
监视在input框中按下回车(enter) js实现
查看>>
php分享三十三:常量
查看>>
重构之路 柳暗花明
查看>>
安卓学习----使用okHttp(POST方式)---登录
查看>>
POJ 2996 Help Me with the Game
查看>>
web.xml元素介绍
查看>>
Shell升级,/bin/bash版本号4.1到4.3
查看>>
linux乱码
查看>>
由浅入深表达式树(完结篇)重磅打造 Linq To 博客园
查看>>
使程序在Linux下后台运行
查看>>
【转】json格式化、高亮库jsonFormater
查看>>
CentOS 7 NetworkManager Keeps Overwriting /etc/resolv.conf
查看>>
smartfoxserver扩展里面过滤聊天的不合法字符
查看>>
cmake简明使用指南
查看>>
计算机操作系统
查看>>
MariaDB mysql 比较区别 选择
查看>>
【EF】Entity Framework Core 命名约定
查看>>
Java中net.sf.json包关于JSON与对象互转的坑
查看>>
Linux配置快捷方式路径
查看>>
[LeetCode] My Calendar III 我的日历之三
查看>>