Skip to main content

DBCore Python 3.12+ License:MIT PyPi version

ORM that does not require the developer to create models specifically for it. dbcore works with dataclasses and allows you to connect from one interface to both local databases (sqlite+aiosqlite) and remote databases (postgres+asyncpg).

Small example

import os
import asyncio
from dataclasses import dataclass

from aiodbcore import AsyncDBCore


# a model in which only the id field gives out DB membership
@dataclass
class MyModel:
    id: int | None = None
    foo: int = 0
    bar: str = ""


class MyDB(AsyncDBCore[MyModel]):
    # there i can implement my queries
    async def my_simple_query(self) -> list[MyModel]:
        return await self.fetchall(MyModel, where=MyModel.foo > 10)


async def main():
    MyDB.init(os.environ["DB"])  # init db at start of program
    db = MyDB()
    data = await db.my_simple_query()
    first = data[0]
    first.foo += 100
    await db.save(first)
    await db.close_connections()


if __name__ == '__main__':
    asyncio.run(main())

The declaration of the model from the example above is certainly simple and elegant, but this method does not allow the IDE to show type hints, and static typers will complain. Therefore, there is another way to declare models, it will require minimal changes in the code.

from dataclasses import dataclas
from aiodbcore.models import Field

@dataclass
class MyModel:
    # Here you can wrap default values in `Field`
    # if you don't want complaints from static typers,
    # but it is not necessary
    id: Field[int | None] = Field(None)
    foo: Field[int] = 0
    bar: Filed[str] = ""

Sync version

SyncDBCore has the same interface as the async version. You just need to remove all the async and await statements.

class MyDB(SyncDBCore[MyModel]):  # the same model `MyModel` is used
    def my_simple_query(self) -> list[MyModel]:
        return self.fetchall(MyModel, where=MyModel.foo > 10)

Currently only sqlite+sqlite3 is supported.

Context manager declaration

Using the Database class allows you to select synchronous and asynchronous connections using the context manager.

from aiodbcore import Database

class MyDB(Database[MyModel]): ...

MyDB.init("sqlite://db.sqlite")  # In this case, you cannot explicitly specify the library in the database path.

def sync_environment():
    with MyDB() as db:
        data = db.fetchall(MyModel)
        
async def async_environment():
    async with MyDB() as db:
        data = await db.fetchall(MyModel)

Installation

You can install aiodbcore using pip:

pip install aiodbcore

for install all async providers (aiosqlite and asyncpg):

pip install aiodbcore[async]

Metadata

Release files for aiodbcore 0.7.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aiodbcore 0.7.1
File Size Uploaded Provenance
aiodbcore-0.7.1.tar.gz 18.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for aiodbcore 0.7.1
File Interpreter ABI Platform
aiodbcore-0.7.1-py3-none-any.whl Python 3 none any Details

Total release size: 48.7 kB

Release files / aiodbcore-0.7.1.tar.gz

Download URL aiodbcore-0.7.1.tar.gz
Size 18.6 kB
Tags Source
SHA-256 checksum
How to use checksums
c143344a3e5e1f55ac98b4a9372fb58b3d1d5947a0b9974c468e8855b24b4b19
BLAKE2b-256 checksum
How to use checksums
02f7d82b2756b7200b46fe85b89783d03c95a6769d06ff2a3ca64e9bf9e513d9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / aiodbcore-0.7.1-py3-none-any.whl

Download URL aiodbcore-0.7.1-py3-none-any.whl
Size 30.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1be95a56799b7ecbb7f4073bbca06cea6f55db65a9028fa53b2d430dce449169
BLAKE2b-256 checksum
How to use checksums
cb128efcf20a524bb444841b6ef129690a990d81041cff89bf92ab33e5652e5b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for aiodbcore 0.7.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page