semvec/pypi-packages huggingface dataset:
microcosm-sqlite 2.0.0
Opinionated persistence with SQLite
Requires Python: >=3.11
Keywords: microcosm

# microcosm-sqlite

Opinionated data loading with SQLite.

While most distributed application runtimes will use a networked data store for mutable state,
the usage patterns of data that is read-only at runtime are great fit for SQLite.

In particular, `microcosm-sqlite` assumes that applications will

 -  Build data sets in advance and ship them as static artifacts (e.g. in source control)
 -  Load data immutable sets at runtime without loading entire data sets into memory


## Writing Models

Persistent data is expected to use SQLAlchemy's declarative base classes. Because different data sets
may be shipped in different SQLite databases, each declarative base class needs to have a **unique**
name and a separate engine configuration, which is achieved by adding `DataSet` as the base of the
declarative base class:

    Base = DataSet.create("some_name")


    class SomeModel(Base):
        __tablename__ = "sometable"

        id = Column(Integer, primary_key=True)


## Using Stores

Basic persistence operations are abstracted through a store:

    class SomeStore(Store):

        @property
        def model_class(self):
            return SomeModel


     store = SomeStore()
     results = store.search()


## Configuring SQLite

Each `DataSet` defaults to using `:memory:` storage, but can be customized in two ways:

 1. The `SQLiteBindFactory` can be configured with custom paths:

        loader = load_from_dict(
            sqlite=dict(
                paths={
                    "some_name": "/path/to/database",
                },
            ),
        )
        graph = create_object_graph("example", loader=loader)

 2. The `microcosm.sqlite` entrypoint can contain a mapping from a data set name to a
    function that returns a path.