RpRelPyDBRelational Python

Documentation

3. Common Recipes

Copyable patterns for common RelPyDB tasks.

Common recipes

Recipes are task-oriented examples. Use them when you know what you want to do, but not which function to look for.

Create a table with an auto id

from relpy import RelPy, AutoNumber

db = RelPy()
db.create_table("users")
db.add_column("users", "id", AutoNumber, is_primary_key=True)
db.add_column("users", "name", str, nullable=False)

Insert many rows from JSON

This is the most important import pattern for API data, JSON files and generated test data.

users_json = [
    {"name": "Alice", "status": "active"},
    {"name": "Bob", "status": "inactive"},
    {"name": "Carol", "status": "active"},
]

db.insert_many("users", users_json)

Query active users

from relpy import col

active_users = (
    db.query("users")
      .where(col("status") == "active")
      .select("id", "name")
      .order_by("name")
      .to_list()
)

Join two tables

orders_with_users = (
    db.query("orders")
      .join("users")
      .select("orders.id", "users.name", "orders.amount")
      .to_list()
)

If automatic FK inference is not available, use explicit columns:

db.query("orders").join("users", on=("user_id", "id"))

Use join shortcuts

db.query("orders").inner_join("users")
db.query("orders").left_join("users")
db.query("orders").right_join("users")
db.query("orders").full_join("users")
db.query("orders").cross_join("users")
db.query("orders").natural_join("users")

Group and aggregate

from relpy import count, sum_

summary = (
    db.query("orders")
      .group_by("status")
      .aggregate(
          order_count=count(),
          total_amount=sum_("amount"),
      )
      .to_list()
)

Export to pandas

df = db.to_pandas("users")

Save and load

db.save("database.relpy.json")
loaded_db = RelPy.load("database.relpy.json")

Use encrypted columns

from relpy import RelPy, AutoNumber

key = RelPy.generate_encryption_key()
db = RelPy(encryption_key=key)

db.create_table("users")
db.add_column("users", "id", AutoNumber, is_primary_key=True)
db.add_column("users", "email", str, nullable=False, is_encrypted=True)

db.insert("users", {"email": "alice@example.com"})

print(db.to_list("users"))
print(db.to_list("users", decrypt=True))

Catch RelPyDB errors

from relpy import RelPyError

try:
    db.insert("users", {"unknown_column": "value"})
except RelPyError as exc:
    print("RelPyDB error:", exc)