Skip to main content

FlyQL

A lightweight, injection-proof query language that parses human-readable filter expressions into a portable AST, transpiles to SQL across ClickHouse, PostgreSQL, and StarRocks, and evaluates in-memory.

Installation

pip install flyql

Requires Python 3.10+.

Quick Start

Parse a query

from flyql import parse

result = parse("status = 200 and active")
print(result.root)

Generate SQL

from flyql import parse
from flyql.generators.clickhouse.generator import to_sql_where
from flyql.generators.clickhouse.column import Column

result = parse("status >= 400 and host like 'prod%'")

columns = {
    "status": Column("status", "UInt32"),
    "host": Column("host", "String"),
}

sql = to_sql_where(result.root, columns)
print(sql)

Generators are available for ClickHouse, PostgreSQL, and StarRocks:

from flyql.generators.clickhouse.generator import to_sql_where
from flyql.generators.postgresql.generator import to_sql_where
from flyql.generators.starrocks.generator import to_sql_where

Match in-memory data

from flyql import parse
from flyql.matcher import Evaluator, Record

result = parse("status = 200 and active")

data = {
    "status": 200,
    "active": True,
    "host": "prod-api-01",
}

evaluator = Evaluator()
matches = evaluator.evaluate(result.root, Record(data))
print(f"Matches: {matches}")  # True

Transformers

from flyql import parse
from flyql.generators.clickhouse.generator import to_sql_where
from flyql.generators.clickhouse.column import Column

result = parse("message|upper = 'ERROR'")

columns = {"message": Column("message", "String")}
sql = to_sql_where(result.root, columns)
print(sql)  # equals(upper(message), 'ERROR')

Column parsing

from flyql.columns import parse, parse_to_json

parsed = parse("message, status")
for col in parsed:
    print(f"{col.name} (display: {col.display_name!r}, segments: {col.segments})")

# Enable transformers
with_transforms = parse(
    "message|chars(25) as msg, status", capabilities={"transformers": True}
)

# Serialize to JSON
json_str = parse_to_json("message, status|upper", capabilities={"transformers": True})
print(json_str)

Query Syntax

Queries consist of conditions connected by boolean operators (and, or, not):

status=200 and active and not archived
service!=api or user="john doe"
message~"error.*" and not debug
(a=1 or b=2) and not (c=3 and d=4)
status in [200, 201] and method not in ['DELETE', 'PUT']

Operators

Operator Syntax
Equals =
Not equals !=
Regex match ~
Not regex match !~
Greater than >
Less than <
Greater or equals >=
Less or equals <=
In list in
Not in list not in
Like like
Not like not like
Case-insensitive like ilike
Case-insensitive not like not ilike

Documentation

Full documentation: docs.flyql.dev

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flyql-1.3.0.tar.gz (154.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flyql-1.3.0-py3-none-any.whl (130.6 kB view details)

Uploaded Python 3

File details

Details for the file flyql-1.3.0.tar.gz.

File metadata

  • Download URL: flyql-1.3.0.tar.gz
  • Upload date:
  • Size: 154.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for flyql-1.3.0.tar.gz
Algorithm Hash digest
SHA256 e8a13c19b02c132e21ddffa6d79639b4ec749221502055ba95d975ffc3350871
MD5 8c1295c19b6eb9ffac99ec7c10b9093f
BLAKE2b-256 77be2a3ed10ac82af64c098f772647ee677688685a1b67e994e3d89806d6096b

See more details on using hashes here.

Provenance

The following attestation bundles were made for flyql-1.3.0.tar.gz:

Publisher: publish.yaml on iamtelescope/flyql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file flyql-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: flyql-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 130.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for flyql-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1850b888ee411603bfb3f39d7219c57b1e6eba11c003acd1512b05dfaa3a32f0
MD5 f3a3796fcec4fd6565238013f586ec35
BLAKE2b-256 e659ac844e477b6f72768beb1444589c75b62e49b0c3bdd4111a428acb5d1560

See more details on using hashes here.

Provenance

The following attestation bundles were made for flyql-1.3.0-py3-none-any.whl:

Publisher: publish.yaml on iamtelescope/flyql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.4.0

2 files

This release

1.3.0 This release

2 files

1.2.0

2 files

1.1.1

2 files

1.1.0

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

0.0.59

2 files

0.0.58

2 files

0.0.57

2 files

0.0.56

2 files

0.0.55

2 files

0.0.54

2 files

0.0.53

2 files

0.0.52

2 files

0.0.50

2 files

0.0.49

2 files

0.0.48

2 files

0.0.47

2 files

0.0.46

2 files

0.0.45

2 files

0.0.42

2 files

0.0.41

2 files

0.0.40

2 files

0.0.38

2 files

0.0.36

2 files

0.0.35

2 files

0.0.34

2 files

0.0.33

2 files

0.0.32

2 files

0.0.31

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page