GSAB
Docs · v0.4.0

CRUD

A SheetManager binds a connection to a schema and gives you async create / read / update / delete.

from gsab import SheetManager

db = SheetManager(conn, schema)
sheet_id = await db.create_sheet("My App DB")   # creates the spreadsheet, returns its id

await db.insert({"id": 101, "name": "Ada", "email": "ada@calc.org"})
await db.bulk_insert([{...}, {...}])            # many rows in one append; returns count

# read everything, or filter:
rows = await db.read()
rows = await db.read({"plan": "pro"})               # equality
rows = await db.read({"name": {"$regex": "Ada"}})   # operator

await db.update({"id": 101}, {"plan": "team"})      # returns rows changed
await db.delete({"plan": "free"})                   # returns rows deleted

await db.rename_sheet("New title")
await db.delete_sheet()                             # remove the whole spreadsheet

read() returns a list of dicts keyed by field name, with values in their schema types (no internal bookkeeping fields leak out). update() and delete() return how many rows matched; delete() uses each row's true sheet index, so duplicate rows are handled correctly.

For filter operators and server-side queries, see Querying.