Documentation
9. Views
Named, reusable query definitions stored on the database object.
What is a view?
A view is a named query stored on the database object. It is defined as a Python lambda (or any callable) that receives the db object and returns a Query. The query is re-executed every time you call db.view("name").to_list().
Views are not persisted to the
.relpy.json file because they contain Python callables. Re-register views after loading a database from disk.create_view
from relpy import RelPy, AutoNumber, col
db = RelPy()
# ... (table setup omitted for brevity)
db.create_view(
"paid_orders",
lambda db: (
db.query("orders")
.where(col("status") == "paid")
.select("id", "amount", "user_id")
),
)
Using a view
# query the view like any table
rows = db.view("paid_orders").to_list()
# chain further operations
total = db.view("paid_orders").sum("amount")
# filter on top of the view
large_paid = (
db.view("paid_orders")
.where(col("amount") > 100)
.to_list()
)
View management
| Function | Returns | Description |
|---|---|---|
db.create_view(name, callable) | self | Registers a named view. |
db.view(name) | Query | Executes the view's callable and returns its Query. |
db.drop_view(name) | self | Removes a view from the database. |
db.list_views() | list[str] | Names of all registered views. |
db.describe_view(name) | dict | Metadata for one view. |
db.describe_views() | list[dict] | Metadata for all views. |
View with join and aggregation
db.create_view(
"revenue_by_city",
lambda db: (
db.query("orders")
.join("users")
.where(col("orders.status") == "paid")
.group_by("users.city")
.aggregate(
orders=count(),
revenue=sum_("orders.amount"),
)
.order_by("revenue", descending=True)
),
)
# Later in your code — re-execute without rewriting the query
summary = db.view("revenue_by_city").to_list()