Thin layer above sqlite3
Project description
Oora
This is intended as a very thin layer above the sqlite3 package by adding a few QOL features:
- default SQLite PRAGMAs fit for server use
- helpers for common write operations (insert, update)
- very basic (forward only) migrations management
- very basic ORM-like functionality for dataclasses (row <-> dataclass)
- lazy connect
Oora is "sql first" and these are out of scope:
- any kind of automatic schema generation
- query abstraction, query generator
install
pip install oora
Usage
import oora
from dataclasses import dataclass
db = oora.DB(
db_path=":memory:", # or /path/to/your/db.sqlite3
# migrations are just pairs of key=>val where key is an arbitrary (but unique) label and val is a SQL script or a callable.
# If val is a callable, it must take a sqlite3.Cursor as first parameter.
# migrations are executed in order
migrations={
# here's an initial migration:
"0000": "CREATE TABLE IF NOT EXISTS user(id INTEGER PRIMARY KEY, name TEXT UNIQUE NOT NULL);",
# simulating a schema evolution, let's add a field:
"0001": "ALTER TABLE user ADD COLUMN email TEXT NULL;",
},
)
db.migrate()
db.insert("user", {"name": "John"})
db.insert("user", {"name": "Jack"})
db.insert("user", {"name": "Jill"})
# dataclasses are perfect to represent rows
# while still allowing custom behaviour
@dataclass
class User:
id: int
name: str
email: str
def __str__(self):
return self.name
# fetch a random instance
user = db.hydrate(User, db.execute("select * from user ORDER BY RANDOM() limit 1").fetchone())
print(f"User(id {user.id}), original name: {user}")
# change name and email
user.name = "Richard"
user.email = "richard@acme.tld"
db.save(user) # name of table is infered from the dataclass name
print(f"User(id {user.id}), updated name: {user} <{user.email}>")
# persist changes
db.commit()
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
oora-0.2.6.tar.gz
(3.7 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
oora-0.2.6-py3-none-any.whl
(4.2 kB
view details)
File details
Details for the file oora-0.2.6.tar.gz.
File metadata
- Download URL: oora-0.2.6.tar.gz
- Upload date:
- Size: 3.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c5f8003af53e5cbef9b500f658485271c3acaafbb0be4b928457f91de462c3f1
|
|
| MD5 |
19a37cc24e421c662c2820fb38a139d6
|
|
| BLAKE2b-256 |
12f5ee87bb474a91275f964e2d0a891765c1d2483db93b3af6b3340ee887ff56
|
File details
Details for the file oora-0.2.6-py3-none-any.whl.
File metadata
- Download URL: oora-0.2.6-py3-none-any.whl
- Upload date:
- Size: 4.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dcd08050b7a7ca85403c2291e8713316fa699d2e2297e5a96a2cfb63fd3ed4b6
|
|
| MD5 |
0338353ee7c448dd69c25d8d92c616f2
|
|
| BLAKE2b-256 |
ab9d0bbf559d5cd79f7d019e6b8862add751131fd1f1b81661f0a8f33a4ec289
|