Filter Queries¶
Basic comparisons¶
from pyrsql import Query
Query.parse("name==demo") # equal
Query.parse("name!=demo") # not equal
Query.parse("age=gt=18") # greater than
Query.parse("age=ge=18") # greater or equal
Query.parse("age=lt=65") # less than
Query.parse("age=le=65") # less or equal
Query.parse("age>18") # greater than (symbol)
Query.parse("age>=18") # greater or equal (symbol)
Query.parse("age<65") # less than (symbol)
Query.parse("age<=65") # less or equal (symbol)
Membership and null checks¶
Query.parse("id=in=(1,2,3)") # IN
Query.parse("id=out=(4,5)") # NOT IN
Query.parse("name=na=") # IS NULL
Query.parse("name=nn=") # IS NOT NULL
Text matching¶
Query.parse("name=like=demo*") # LIKE
Query.parse("name=notlike=demo") # NOT LIKE
Query.parse("name=ic=demo*") # ILIKE (case-insensitive)
Query.parse("name=ilike=DEMO") # ILIKE alias
Range¶
Logical composition¶
Query.parse("name==demo;age=gt=18") # AND (semicolon)
Query.parse("name==demo,age=gt=18") # OR (comma)
Query.parse("(name==demo;age=gt=18),status==active") # grouping
Quoting¶
Query.parse("name=='de\\'mo'") # quoted string with escape
Query.parse("name=='*not a wildcard*'") # literal asterisks inside quotes
Wildcard matching in equality¶
By default, * in equality expressions is treated as a LIKE wildcard:
Disable with strict mode:
Case-insensitive equality¶
LIKE escape character¶
DISTINCT¶
Function selectors¶
Whitelist SQL functions to use in filter expressions:
Parser limits¶
from pyrsql.parsing.limits import ParseLimits
Query.parse("...", options=QueryOptions(
parse_limits=ParseLimits(
max_query_length=4096,
max_expression_depth=8,
max_node_count=512,
),
))