https://github.com/phact/fastastra
A bit of extra usability for astradb (modeled after fastlite)
https://github.com/phact/fastastra
Last synced: 3 months ago
JSON representation
A bit of extra usability for astradb (modeled after fastlite)
- Host: GitHub
- URL: https://github.com/phact/fastastra
- Owner: phact
- Created: 2024-08-02T04:39:43.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-06-03T20:11:37.000Z (about 1 year ago)
- Last Synced: 2025-09-14T15:11:43.948Z (9 months ago)
- Language: Python
- Size: 750 KB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# fastastra
[](https://github.com/phact/fastastra/commits/main)
[](https://github.com/phact/fastastra/commits/main)
[](https://badge.fury.io/py/fastastra)
[](https://discord.gg/MEFVXUvsuy)
[](https://github.com/phact/fastastra/stargazers)
fastastra is modeled after [fastlite](https://github.com/AnswerDotAI/fastlite) and it allows you to use [FastHTML](https://github.com/AnswerDotAI/fasthtml) with AstraDB (Cassandra).
## Installation
poetry add fastastra
or
pip install fastastra
## To connect:
from fastastra.fastastra import AstraDatabase
db = AstraDatabase(token, dbid) # get your token and dbid from https://astra.datastax.com
## Basic usage
### List tables
db.t
### Create a table
cats = db.t.cats
if cats not in db.t:
cats.create(cat_id=uuid.uuid1, name=str, partition_keys='cat_id')
### Insert a row
cat_timeuuid = uuid.uuid1()
cats.update(cat_id=cat_timeuuid, name="fluffy")
### List all rows
rows = cats()
### ANN / vector search
db = AstraDatabase(token, dbid, embedding_model="embed-english-v3.0") # supports all embedding models in LiteLLM using env vars
dogs = db.t.dogs
if dogs not in db.t:
#dogs.create(id=int, name=str, good_boy=bool, embedding=(list[float], 2), pk='id') # specify dimensions in create
dogs.create(id=int, name=str, good_boy=bool, embedding=list[float], pk='id') # infer dimensions from db.embedding_model
dogs.c.good_boy.index()
dogs.c.embedding.index()
dogs.insert(id=2, good_boy=True, name="spike", embedding=[0.1, 0.2])
index_lookukp = dogs.xtra(good_boy=True)
ann_matches = dogs.xtra(embedding=[0.2, 0.2])
### Get dataclass and pydantic model
dataclass = cats.dataclass()
model = cats.pydantic_model()
### Get a row
print(cats[cat_timeuuid])
# Delete a row
cats.delete(cat_timeuuid)
or
cats.delete(str(cat_timeuuid))
## Run a FastHTML example:
This example was taken almost verbatim from [the FastHTML examples repo](https://github.com/AnswerDotAI/fasthtml-example). The only change was the dependency, the db connection string, and changing the id from `int` to `uuid1`.
uv sync
uv run python examples/todo.py