RpRelPyDBRelational Python

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

FunctionReturnsDescription
db.create_view(name, callable)selfRegisters a named view.
db.view(name)QueryExecutes the view's callable and returns its Query.
db.drop_view(name)selfRemoves a view from the database.
db.list_views()list[str]Names of all registered views.
db.describe_view(name)dictMetadata 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()