DBCore

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+sqlite3is 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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| aiodbcore-0.7.1.tar.gz | 18.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.