一个用于web的通用crud框架。

pycurd的Python项目详细描述


积脓

codecov

一个用于web的通用crud框架。在

项目移动到https://pypi.org/project/pycrud/

特点:

  • 通过json或dsl生成查询

  • 基于角色的权限系统

  • 易于与web框架集成

  • 测试覆盖范围

示例:

定义

fromtypingimportOptionalfromplayhouse.db_urlimportconnectfrompycurd.crud.ext.peewee_crudimportPeeweeCrudfrompycurd.typesimportRecordMappingclassUser(RecordMapping):id:Optional[int]nickname:strusername:strpassword:str='password'db=connect("sqlite:///:memory:")c=PeeweeCrud(None,{User:'users'},db)

创建

^{pr2}$

读取

frompycurd.queryimportQueryInfo# from dsllst=awaitc.get_list(QueryInfo.from_table_raw(User,where=[User.id!=1]))# from jsonlst=awaitc.get_list(QueryInfo.from_json(User,{'id.eq':1}))print([x.to_dict()forxinlst])

更新

frompycurd.queryimportQueryInfofrompycurd.valuesimportValuesToWritev=ValuesToWrite({'nickname':'bbb','username':'u2'})# from dsllst=awaitc.update(QueryInfo.from_table_raw(User,where=[User.id.in_([1,2,3])]))# from jsonlst=awaitc.update(QueryInfo.from_json(User,{'id.in':[1,2,3]}),v)print(lst)

删除

frompycurd.queryimportQueryInfolst=awaitc.delete(QueryInfo.from_json(User,{'id.in':[1,2,3]}))print(lst)

json查询

frompycurd.queryimportQueryInfo# $or: (id < 3) or (id > 5)QueryInfo.from_json(User,{'$or':{'id.lt':3,'id.gt':5}})# $and: 3 < id < 5QueryInfo.from_json(User,{'$and':{'id.gt':3,'id.lt':5}})# $not: not (3 < id < 5)QueryInfo.from_json(User,{'$not':{'id.gt':3,'id.lt':5}})# multiple same operator: (id == 3) or (id == 4) or (id == 5)QueryInfo.from_json(User,{'$or':{'id.eq':3,'id.eq.2':4,'id.eq.3':5,}})# multiple same operator: (3 < id < 5) or (10 < id < 15)QueryInfo.from_json(User,{'$or':{'$and':{'id.gt':3,'id.lt':5},'$and.2':{'id.gt':10,'id.lt':15}}})

DSL查询

# $or: (id < 3) or (id > 5)(User.id<3)|(User.id>5)# $and: 3 < id < 5(User.id>3)&(User.id<5)# $not: not (3 < id < 5)~((User.id>3)&(User.id<5))# multiple same operator: (id == 3) or (id == 4) or (id == 5)(User.id!=3)|(User.id!=4)|(User.id!=5)# multiple same operator: (3 < id < 5) or (10 < id < 15)((User.id>3)&(User.id<5))|((User.id>10)&(User.id<15))

操作员

typeoperatortext
compareEQ('eq', '==')
compareNE('ne', '!=')
compareLT('lt', '<')
compareLE('le', '<=')
compareGE('ge', '>=')
compareGT('gt', '>')
relationIN('in',)
relationNOT_IN('notin', 'not in')
relationIS('is',)
relationIS_NOT('isnot', 'is not')
relationPREFIX('prefix',)
relationCONTAINS('contains',)
logicAND('and',)
logicOR('or',)
// usage:
{
  'time.ge': 1,
  '$or': {
    'id.in': [1, 2, 3],
    '$and': {
      'time.ge': 100,
      'time.le': 500,
    }
  }
}

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

推荐PyPI第三方库


热门话题
java文件路径中的java UTF8字符   java如何可靠地写入OPC UA服务器?   for-my-if语句中的java循环不能产生我想要的结果   java我如何在1个XSL中加入2个XML   macos无法在“/Library/Java/JavaVirtualMachines/jdk15.0.1.jdk/Contents/Home/bin/apt”中找到可执行文件   Java代码简单数学   java如何避免selenium中的sendKeys方法清除之前填充的文本?   java如何将PlacesAPI自动完成小部件传递到自定义对话框?   带有文本块的java Intellij json片段问题   启动时Spring启动错误:java。木卫一。IOException:jsse。别名\u否\u键\u项   移动文件时发生java异常   http Java Web客户端远程连接