Quickstart#
Installation#
Install as a Pixi dependency:
[dependencies]
autostorage = ">=0.0.12"
Or with uv/pip from PyPI:
uv add autostorage
Requires Python ≥3.12.
Usage#
import numpy as np
from autostorage import (
CalculationGeometryLink,
CalculationRow,
Database,
EnergyRow,
GeometryRow,
ModelRow,
Role,
)
# Open (or create) a SQLite database; ":memory:" also works for scratch use.
db = Database("workflow.db")
# Work within a session context.
with db.session() as session:
# Create a model specifying the calculation type, program, method, and basis.
model = ModelRow(
calc_type="energy",
program="orca",
method="b3lyp",
basis="def2-svp",
)
# Create a calculation using this model.
calc = CalculationRow(model=model)
# Create a geometry.
geo = GeometryRow(
symbols=["H", "O", "H"],
coordinates=np.array([[0, 0, 0.8], [0, 0, 0], [0.8, 0, 0]]),
charge=0,
spin=0,
)
# Link the geometry to the calculation as an input.
link = CalculationGeometryLink(
calculation=calc,
geometry=geo,
role=Role.INPUT,
)
# Add all objects to the session and commit.
session.add_all([model, calc, geo, link])
session.commit()
# Attach an energy result to the geometry/calculation pair.
energy = EnergyRow(geometry=geo, calculation=calc, value=-76.02)
session.add(energy)
session.commit()
# Query the result back by filtering on geometry and calculation.
found = session.query(EnergyRow).filter_by(
geometry_id=geo.id,
calculation_id=calc.id,
).first()
assert found is not None
print(found.value)
db.close()
The Database.session() method returns a standard SQLAlchemy Session that supports the
context manager protocol. Sessions automatically handle transaction management — commit
explicitly to persist changes, and unhandled exceptions trigger a rollback.
See the API reference for full details on every model and method.