derp.orm.query – Query Builder¶
Query builder module for Derp ORM.
- class derp.orm.query.SelectQuery[source]¶
Bases:
_WhereShorthandMixin,GenericSELECT query - T is the result element type (Table subclass or dict).
- __init__(pool, columns, *, cache_store=None, router=None)[source]¶
- Parameters:
pool (Pool | Connection | None)
columns (tuple[type[Table] | Column[Any] | Expression, ...])
cache_store (KVClient | None)
router (ReplicaRouter | None)
- where(cond)[source]¶
Add WHERE clause. Multiple calls combine with AND.
- Parameters:
cond (Expression)
- Return type:
- inner_join(table, condition)[source]¶
Add INNER JOIN.
- Parameters:
table (type[Table])
condition (Expression)
- Return type:
- left_join(table, condition)[source]¶
Add LEFT JOIN.
- Parameters:
table (type[Table])
condition (Expression)
- Return type:
- right_join(table, condition)[source]¶
Add RIGHT JOIN.
- Parameters:
table (type[Table])
condition (Expression)
- Return type:
- full_join(table, condition)[source]¶
Add FULL OUTER JOIN.
- Parameters:
table (type[Table])
condition (Expression)
- Return type:
- having(cond)[source]¶
Add HAVING clause. Multiple calls combine with AND.
- Parameters:
cond (Expression)
- Return type:
- as_(alias)[source]¶
Wrap this query as a subquery expression with an alias.
- Parameters:
alias (str)
- Return type:
SubqueryExpr
- with_cte(name, query)[source]¶
Add a Common Table Expression (WITH clause).
- Parameters:
name (str)
query (SelectQuery[Any])
- Return type:
- union(other)[source]¶
Combine with another query using UNION.
- Parameters:
other (SelectQuery[Any])
- Return type:
SetOperationQuery[T]
- union_all(other)[source]¶
Combine with another query using UNION ALL.
- Parameters:
other (SelectQuery[Any])
- Return type:
SetOperationQuery[T]
- intersect(other)[source]¶
Combine with another query using INTERSECT.
- Parameters:
other (SelectQuery[Any])
- Return type:
SetOperationQuery[T]
- except_(other)[source]¶
Combine with another query using EXCEPT.
- Parameters:
other (SelectQuery[Any])
- Return type:
SetOperationQuery[T]
- class derp.orm.query.InsertQuery[source]¶
Bases:
_InsertQueryBase,GenericINSERT query without RETURNING - execute() returns None.
- values(**kwargs)[source]¶
Set values to insert.
- Parameters:
kwargs (Any)
- Return type:
InsertQuery[T]
- columns(*cols)[source]¶
Set column names for INSERT … SELECT.
- Parameters:
cols (Column[Any] | str)
- Return type:
InsertQuery[T]
- from_select(query)[source]¶
Set the SELECT query for INSERT … SELECT.
- Parameters:
query (SelectQuery[Any])
- Return type:
InsertQuery[T]
- ignore_conflicts(*, target)[source]¶
Add ON CONFLICT DO NOTHING.
Returns a query whose
returning().execute()yieldsT | Noneinstead ofT, since the conflict may suppress the insert.- Parameters:
target (Column[Any] | tuple[Column[Any], ...])
- Return type:
InsertQueryIgnoreConflicts[T]
- upsert(*, target, **kwargs)[source]¶
Add ON CONFLICT DO UPDATE SET (upsert).
Pass the columns to update as keyword arguments:
.upsert(target=User.email, name="Updated")
- Parameters:
target (Column[Any] | tuple[Column[Any], ...])
kwargs (Any)
- Return type:
InsertQuery[T]
- returning(table: type[T], /) ReturningOne[T][source]¶
- returning(c1: Column[V], /) ReturningOneScalar[T, V]
- returning(c1: Column[A], c2: Column[B], /) ROT2[T, A, B]
- returning(c1: Column[A], c2: Column[B], c3: Column[C], /) ROT3[T, A, B, C]
- returning(c1: Column[A], c2: Column[B], c3: Column[C], c4: Column[D], /) ROT4[T, A, B, C, D]
- returning(c1: Column[A], c2: Column[B], c3: Column[C], c4: Column[D], c5: Column[E], /) ROT5[T, A, B, C, D, E]
- returning(c1: Column[A], c2: Column[B], c3: Column[C], c4: Column[D], c5: Column[E], c6: Column[F], /) ROT6[T, A, B, C, D, E, F]
- returning(c1: Column[A], c2: Column[B], c3: Column[C], c4: Column[D], c5: Column[E], c6: Column[F], c7: Column[G], /) ROT7[T, A, B, C, D, E, F, G]
- returning(c1: Column[A], c2: Column[B], c3: Column[C], c4: Column[D], c5: Column[E], c6: Column[F], c7: Column[G], c8: Column[H], /) ROT8[T, A, B, C, D, E, F, G, H]
- returning(c1: Column[A], c2: Column[B], c3: Column[C], c4: Column[D], c5: Column[E], c6: Column[F], c7: Column[G], c8: Column[H], c9: Column[I], /) ROT9[T, A, B, C, D, E, F, G, H, I]
- returning(c1: Column[A], c2: Column[B], c3: Column[C], c4: Column[D], c5: Column[E], c6: Column[F], c7: Column[G], c8: Column[H], c9: Column[I], c10: Column[J], /) ROT10[T, A, B, C, D, E, F, G, H, I, J]
Add RETURNING clause.
- Parameters:
columns (Any)
- Return type:
ReturningOne[T] | ReturningOneScalar[T, Any] | ReturningOneTuple[T]
- class derp.orm.query.UpdateQuery[source]¶
Bases:
_WhereShorthandMixin,_ReturningManyMixin,GenericUPDATE query — execute() returns None, returning() for results.
- __init__(pool, table, *, router=None)[source]¶
- Parameters:
pool (asyncpg.Pool | asyncpg.Connection | None)
table (type[T])
router (ReplicaRouter | None)
- set(**kwargs)[source]¶
Set values to update.
- Parameters:
kwargs (Any)
- Return type:
UpdateQuery[T]
- where(cond)[source]¶
Add WHERE clause. Multiple calls combine with AND.
- Parameters:
cond (Expression)
- Return type:
UpdateQuery[T]
- class derp.orm.query.DeleteQuery[source]¶
Bases:
_WhereShorthandMixin,_ReturningManyMixin,GenericDELETE query — execute() returns None, returning() for results.
- __init__(pool, table, *, router=None)[source]¶
- Parameters:
pool (asyncpg.Pool | asyncpg.Connection | None)
table (type[T])
router (ReplicaRouter | None)
- where(cond)[source]¶
Add WHERE clause. Multiple calls combine with AND.
- Parameters:
cond (Expression)
- Return type:
DeleteQuery[T]
- class derp.orm.query.TableRef[source]¶
Bases:
objectNon ORM table reference for string-based queries.
Example:
db.table("users").select("*").eq("id", 1).execute() db.table("users").insert({"name": "Bob"}).execute() db.table("users").update({"name": "Robert"}).eq("id", 1).execute() db.table("users").delete().eq("id", 1).execute()
- select(*columns)[source]¶
Start a SELECT query.
- Parameters:
*columns (str) – Column names to select. Use
"*"or omit for all columns. A single comma-separated string like"name, email"is also accepted.- Returns:
SelectQuery[dict[str, Any]]
- Return type:
SelectQuery[dict[str, Any]]
- class derp.orm.query.JoinType[source]¶
Bases:
StrEnumSQL JOIN types.
- INNER = 'INNER'¶
- LEFT = 'LEFT'¶
- RIGHT = 'RIGHT'¶
- FULL = 'FULL OUTER'¶
- CROSS = 'CROSS'¶
- __new__(value)¶
- class derp.orm.query.LockMode[source]¶
Bases:
StrEnumSQL row-level locking modes.
- UPDATE = 'FOR UPDATE'¶
- NO_KEY_UPDATE = 'FOR NO KEY UPDATE'¶
- SHARE = 'FOR SHARE'¶
- KEY_SHARE = 'FOR KEY SHARE'¶
- __new__(value)¶
- class derp.orm.query.SortOrder[source]¶
Bases:
StrEnumColumn sort order within an index.
- ASC = 'ASC'¶
- DESC = 'DESC'¶
- __new__(value)¶
- class derp.orm.query.LogicalOperator[source]¶
Bases:
StrEnumSQL logical operators.
- AND = 'AND'¶
- OR = 'OR'¶
- __new__(value)¶
- class derp.orm.query.ComparisonOperator[source]¶
Bases:
StrEnumSQL comparison operators.
- EQ = '='¶
- NE = '<>'¶
- GT = '>'¶
- GTE = '>='¶
- LT = '<'¶
- LTE = '<='¶
- __new__(value)¶
- class derp.orm.query.Expression[source]¶
Bases:
ABCBase class for SQL expressions.
- matches(query, *, language='english', style='websearch', stored=False)[source]¶
Full-text search match using
@@.stored: set to
Truewhen the column is a pre-computed tsvector (skips theto_tsvector()wrapper). style:"websearch"(default),"plain", or"phrase".
- ts_rank(query, *, language='english', style='websearch', stored=False)[source]¶
Full-text search rank for ORDER BY.
stored: set to
Truewhen the column is a pre-computed tsvector (skips theto_tsvector()wrapper).
- class derp.orm.query.RawSQL[source]¶
Bases:
ExpressionRaw SQL fragment with optional parameterized values.
Use the
sql()factory function to create instances:sql("NOW()") sql("age > {}", 18) sql("age > {} AND name = {}", 18, "Alice")