与restapi结合使用的sql查询构建规范及其peewee实现。
querybuilder的Python项目详细描述
下表示例:
CREATETABLEarticle(idintegerNOTNULL,createdtimestampwithouttimezoneNOTNULL,titlecharactervarying(255)NOTNULL,type_idintegerNOTNULL,topic_idintegerNOTNULL,author_idsinteger[]NOTNULL,category_idsinteger[],tagscharactervarying(255)[],keywordscharactervarying(255)[],summarytext,contenttextNOTNULL,coverjsonbNOTNULL,editors_pickbooleanNOTNULL,pageviewsbigintNOTNULL,updatedtimestampwithouttimezoneNOTNULL,publishedtimestampwithouttimezone,permalinkcharactervarying(255),cust_metajsonb);
规格
- 对于type_id等于1(type_id = 1)的所有项目: json { "EQ": { "type_id": 1 } }相同的结构是 收件人:
Condition | JSON KEY | Symbol | JSON Query |
---|---|---|---|
Less than | LT | < | ^{tt5}$ |
Less than or Equal to | LE | <= | ^{tt6}$ |
Greater than | GT | > | ^{tt7}$ |
Greater than or Equal to | GE | >= | ^{tt8}$ |
Not equal | NE | != | ^{tt9}$ |
在
对于type_id位于[1, 2, 3]中的所有项目,json查询 将是:
{"IN":{"pageviews":[1,2,3]}}
介于
对于所有pageviews介于10000和15000之间的项目,json 查询将是:
{"BETWEEN":{"pageviews":[10000,15000]}}
包含任何
对于author_ids包含8, 9, 10中任何一个的所有项目, json查询将是:
{"CONTAINS_ANY":{"author_ids":[8,9,10]}}
包含所有
对于author_ids包含所有8, 9的所有项目,json 查询将是:
{"CONTAINS_ALL":{"author_ids":[8,9]}}
从
开始对于以Film Review开头的title的所有文章, json查询将是:
{"STARTSWITH":{"title":"Film Review"}}
复杂查询
- 复杂查询可以包含OR或^{tt20}的嵌套结构$ 或者两者都有。
对于pageviews介于10000和15000之间且其 author_ids包含8(作者的ID)(在上面的架构中, author_ids是postgres中的arrayfield,json查询将是:
{"AND":[{"BETWEEN":{"pageviews":[10000,15000]}},{"CONTAINS":{"author_ids":[8]}}]}
要求
- 如果只有一个条件,如pageviews>;100,则查询
可以直接将最外面的键包含为
EQ, NE, GT, GE, LT, LE, STARTSWITH, CONTAINS, CONTAINS_ALL, CONTAINS_ANY, BETWEEN。
示例:
{"STARTSWITH":{"title":"Film Review"}}
- 但如果涉及到更多的条件,最外层的密钥必须是 或