Skip to main content

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)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oora-0.2.6-py3-none-any.whl (4.2 kB view details)

Uploaded Python 3

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

Hashes for oora-0.2.6.tar.gz
Algorithm Hash digest
SHA256 c5f8003af53e5cbef9b500f658485271c3acaafbb0be4b928457f91de462c3f1
MD5 19a37cc24e421c662c2820fb38a139d6
BLAKE2b-256 12f5ee87bb474a91275f964e2d0a891765c1d2483db93b3af6b3340ee887ff56

See more details on using hashes here.

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

Hashes for oora-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 dcd08050b7a7ca85403c2291e8713316fa699d2e2297e5a96a2cfb63fd3ed4b6
MD5 0338353ee7c448dd69c25d8d92c616f2
BLAKE2b-256 ab9d0bbf559d5cd79f7d019e6b8862add751131fd1f1b81661f0a8f33a4ec289

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page