https://github.com/globality-corp/microcosm-sqlite
https://github.com/globality-corp/microcosm-sqlite
microcosm sqlite
Last synced: 5 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/globality-corp/microcosm-sqlite
- Owner: globality-corp
- License: apache-2.0
- Archived: true
- Created: 2018-01-08T07:51:31.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2025-05-14T16:51:19.000Z (about 1 year ago)
- Last Synced: 2025-08-31T01:25:30.056Z (10 months ago)
- Topics: microcosm, sqlite
- Language: Python
- Homepage:
- Size: 154 KB
- Stars: 0
- Watchers: 23
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# 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.