Skip to main content

Database ORM Connections and Queries

Project description

ddcDatabases

Donate License: MIT PyPi PyPI Downloads codecov CI/CD Pipeline Quality Gate Status
Build Status Code style: black Python

Support me on GitHub

A Python library for database connections and ORM queries with support for multiple database engines including SQLite, PostgreSQL, MySQL, MSSQL, Oracle, and MongoDB.

Table of Contents

Features

  • Multiple Database Support: SQLite, PostgreSQL, MySQL, MSSQL, Oracle, and MongoDB
  • Sync and Async Support: Both synchronous and asynchronous operations
  • Environment Configuration: Optional parameters with .env file fallback
  • SQLAlchemy Integration: Built on top of SQLAlchemy ORM
  • Connection Pooling: Configurable connection pooling for better performance

Default Session Settings

Synchronous Sessions:

  • autoflush = True
  • expire_on_commit = True
  • echo = False

Asynchronous Sessions:

  • autoflush = True
  • expire_on_commit = False
  • echo = False

Note: All constructor parameters are optional and fall back to .env file variables.

Installation

Basic Installation (SQLite only)

pip install ddcDatabases

Note: The basic installation includes only SQlite. Database-specific drivers are optional extras that you can install as needed.

Database-Specific Installations

Install only the database drivers you need:

# All database drivers (recommended for development)
pip install ddcDatabases[all]

# SQL Server / MSSQL
pip install ddcDatabases[mssql]

# MySQL / MariaDB
pip install ddcDatabases[mysql]

# PostgreSQL
pip install ddcDatabases[pgsql]

# Oracle Database
pip install ddcDatabases[oracle]

# MongoDB
pip install ddcDatabases[mongodb]

# Multiple databases (example)
pip install ddcDatabases[mysql,pgsql,mongodb]

Available Database Extras:

  • all - All database drivers
  • mssql - Microsoft SQL Server (pyodbc, aioodbc)
  • mysql - MySQL/MariaDB (pymysql, aiomysql)
  • pgsql - PostgreSQL (psycopg2-binary, asyncpg)
  • oracle - Oracle Database (cx-oracle)
  • mongodb - MongoDB (pymongo)

Platform Notes:

  • SQLite support is included by default (no extra installation required)
  • PostgreSQL extras may have compilation requirements on some systems
  • All extras support both synchronous and asynchronous operations where applicable

Database Classes

SQLite

class Sqlite(
    filepath: Optional[str] = None,
    echo: Optional[bool] = None,
    autoflush: Optional[bool] = None,
    expire_on_commit: Optional[bool] = None,
    extra_engine_args: Optional[dict] = None,
)

Example:

import sqlalchemy as sa
from ddcDatabases import DBUtils, Sqlite
from your_models import User  # Your SQLAlchemy model

with Sqlite() as session:
    db_utils = DBUtils(session)
    stmt = sa.select(User).where(User.id == 1)
    results = db_utils.fetchall(stmt)
    for row in results:
        print(row)

MSSQL (SQL Server)

class MSSQL(
    host: Optional[str] = None,
    port: Optional[int] = None,
    user: Optional[str] = None,
    password: Optional[str] = None,
    database: Optional[str] = None,
    schema: Optional[str] = None,
    echo: Optional[bool] = None,
    pool_size: Optional[int] = None,
    max_overflow: Optional[int] = None,
    autoflush: Optional[bool] = None,
    expire_on_commit: Optional[bool] = None,
    extra_engine_args: Optional[dict] = None,
)

Synchronous Example:

import sqlalchemy as sa
from ddcDatabases import DBUtils, MSSQL
from your_models import User

with MSSQL() as session:
    stmt = sa.select(User).where(User.id == 1)
    db_utils = DBUtils(session)
    results = db_utils.fetchall(stmt)
    for row in results:
        print(row)

Asynchronous Example:

import sqlalchemy as sa
from ddcDatabases import DBUtilsAsync, MSSQL
from your_models import User

async def main():
    async with MSSQL() as session:
        stmt = sa.select(User).where(User.id == 1)
        db_utils = DBUtilsAsync(session)
        results = await db_utils.fetchall(stmt)
        for row in results:
            print(row)

PostgreSQL

class PostgreSQL(
    host: Optional[str] = None,
    port: Optional[int] = None,
    user: Optional[str] = None,
    password: Optional[str] = None,
    database: Optional[str] = None,
    echo: Optional[bool] = None,
    autoflush: Optional[bool] = None,
    expire_on_commit: Optional[bool] = None,
    engine_args: Optional[dict] = None,
)

Synchronous Example:

import sqlalchemy as sa
from ddcDatabases import DBUtils, PostgreSQL
from your_models import User

with PostgreSQL() as session:
    stmt = sa.select(User).where(User.id == 1)
    db_utils = DBUtils(session)
    results = db_utils.fetchall(stmt)
    for row in results:
        print(row)

Asynchronous Example:

import sqlalchemy as sa
from ddcDatabases import DBUtilsAsync, PostgreSQL
from your_models import User

async def main():
    async with PostgreSQL() as session:
        stmt = sa.select(User).where(User.id == 1)
        db_utils = DBUtilsAsync(session)
        results = await db_utils.fetchall(stmt)
        for row in results:
            print(row)

MySQL

Synchronous Example:

import sqlalchemy as sa
from ddcDatabases import DBUtils, MySQL

with MySQL() as session:
    stmt = sa.text("SELECT * FROM users WHERE id = :user_id")
    db_utils = DBUtils(session)
    results = db_utils.fetchall(stmt, {"user_id": 1})
    for row in results:
        print(row)

Oracle

class Oracle(
    host: Optional[str] = None,
    port: Optional[int] = None,
    user: Optional[str] = None,
    password: Optional[str] = None,
    servicename: Optional[str] = None,
    echo: Optional[bool] = None,
    autoflush: Optional[bool] = None,
    expire_on_commit: Optional[bool] = None,
    extra_engine_args: Optional[dict] = None,
)

Example with explicit credentials:

import sqlalchemy as sa
from ddcDatabases import DBUtils, Oracle

credentials = {
    "host": "127.0.0.1",
    "user": "system",
    "password": "oracle",
    "servicename": "xe",
    "echo": False,
}

with Oracle(**credentials) as session:
    stmt = sa.text("SELECT * FROM dual")
    db_utils = DBUtils(session)
    results = db_utils.fetchall(stmt)
    for row in results:
        print(row)

MongoDB

class MongoDB(
    host: Optional[str] = None,
    port: Optional[int] = None,
    user: Optional[str] = None,
    password: Optional[str] = None,
    database: Optional[str] = None,
    batch_size: Optional[int] = None,
    limit: Optional[int] = None,
)

Example with explicit credentials:

from ddcDatabases.mongodb import MongoDB
from bson.objectid import ObjectId

credentials = {
    "host": "127.0.0.1",
    "user": "admin",
    "password": "admin",
    "database": "admin",
}

with MongoDB(**credentials) as mongodb:
    query = {"_id": ObjectId("6772cf60f27e7e068e9d8985")}
    collection = "movies"
    with mongodb.cursor(collection, query) as cursor:
        for document in cursor:
            print(document)

Database Engines

Access the underlying SQLAlchemy engine for advanced operations:

Synchronous Engine:

from ddcDatabases import PostgreSQL

with PostgreSQL() as session:
    engine = session.bind
    # Use engine for advanced operations

Asynchronous Engine:

from ddcDatabases import PostgreSQL

async def main():
    async with PostgreSQL() as session:
        engine = session.bind
        # Use engine for advanced operations

Database Utilities

The DBUtils and DBUtilsAsync classes provide convenient methods for common database operations:

Available Methods

from ddcDatabases import DBUtils, DBUtilsAsync

# Synchronous utilities
db_utils = DBUtils(session)
results = db_utils.fetchall(stmt)           # Returns list of RowMapping objects
value = db_utils.fetchvalue(stmt)           # Returns single value as string
db_utils.insert(stmt)                       # Insert into model table
db_utils.deleteall(model)                   # Delete all records from model
db_utils.insertbulk(model, data_list)      # Bulk insert from list of dictionaries
db_utils.execute(stmt)                      # Execute any SQLAlchemy statement

# Asynchronous utilities (similar interface with await)
db_utils_async = DBUtilsAsync(session)
results = await db_utils_async.fetchall(stmt)

Development

Building from Source

poetry build -f wheel

Running Tests

poetry update --with test
poe tests

License

Released under the MIT License

Support

If you find this project helpful, consider supporting development:

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

ddcdatabases-2.0.5.tar.gz (15.8 kB view details)

Uploaded Source

Built Distributions

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

ddcdatabases-2.0.5-cp313-cp313-win_amd64.whl (16.9 kB view details)

Uploaded CPython 3.13Windows x86-64

ddcdatabases-2.0.5-cp313-cp313-manylinux_2_39_x86_64.whl (16.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

ddcdatabases-2.0.5-cp313-cp313-macosx_15_0_arm64.whl (16.8 kB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

ddcdatabases-2.0.5-cp313-cp313-macosx_14_0_arm64.whl (16.8 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

ddcdatabases-2.0.5-cp312-cp312-win_amd64.whl (16.9 kB view details)

Uploaded CPython 3.12Windows x86-64

ddcdatabases-2.0.5-cp312-cp312-manylinux_2_39_x86_64.whl (16.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

ddcdatabases-2.0.5-cp312-cp312-macosx_15_0_arm64.whl (16.8 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

ddcdatabases-2.0.5-cp312-cp312-macosx_14_0_arm64.whl (16.8 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

File details

Details for the file ddcdatabases-2.0.5.tar.gz.

File metadata

  • Download URL: ddcdatabases-2.0.5.tar.gz
  • Upload date:
  • Size: 15.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for ddcdatabases-2.0.5.tar.gz
Algorithm Hash digest
SHA256 c166723dc6309b1494fe2c5d5444d64111742c5c6be7ec548c62ffdf94cad50b
MD5 8573f446164056bacb3ce8c55d793cf1
BLAKE2b-256 ff29dd8ca6bb90b96009c7c54e1802397ec794846e3f99609e40b301809d276c

See more details on using hashes here.

File details

Details for the file ddcdatabases-2.0.5-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for ddcdatabases-2.0.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 5878d77090268997945f114a9ae0b7fee8ddef7d0db2acd602ddf41b8643b406
MD5 088ab51cb29c877a668ab2f572c67c84
BLAKE2b-256 5fea277840dbcf12b213b6ec61cbf7f14f09a1089aae8b91d12ea1c1017527f5

See more details on using hashes here.

File details

Details for the file ddcdatabases-2.0.5-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for ddcdatabases-2.0.5-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 f17ed9c45ab062100a203efc25bc2e5b3e2ef7639378c6819f55e737cca7dfc9
MD5 e25f6aed639bfff1ce66c248ef11050d
BLAKE2b-256 65809e0398d1a4368c3170de27310a9a464f4344186c7f733833639ee736a0d4

See more details on using hashes here.

File details

Details for the file ddcdatabases-2.0.5-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for ddcdatabases-2.0.5-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 4d381a8a655883c146c08f76cb2a3e11f4b7863934cd0c9bc765094663757617
MD5 8cdf9d5ae458d39ed3429466eb752239
BLAKE2b-256 0ba6de5984467364c51fe47816b38909dbb105629b58686eb3eca5a267590b4a

See more details on using hashes here.

File details

Details for the file ddcdatabases-2.0.5-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for ddcdatabases-2.0.5-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7a83e22c5f34a5245b19b1a59db64f1dae9c64d917d0e358b205afd81305673b
MD5 6dea22bf087d14e3481a22d4c310d5c8
BLAKE2b-256 4f115fe7d8fbb9062213a9718073255ae3a83d0db6c88b066a9f731cdb65674c

See more details on using hashes here.

File details

Details for the file ddcdatabases-2.0.5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for ddcdatabases-2.0.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 365b806639f3897bc8c6f52ed9322d1252c1521c482f2bee80244424063bf0ff
MD5 a2deeadc1245b12b3b264aafd3469737
BLAKE2b-256 b2735973999677875ee14211cb1d696ab49da6293d6f8cdfb783cd69478f19f3

See more details on using hashes here.

File details

Details for the file ddcdatabases-2.0.5-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for ddcdatabases-2.0.5-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 59ee55a96ebaf2409579aeb633d029cd57923b3dc3f8f1a7995c727bb7ac51ff
MD5 cd9b655d575a79461de7b3c6d8e06572
BLAKE2b-256 ae001354b994a43240ca484784b01e3c1e3ee4c7549c54a97dd270bb29a7ef76

See more details on using hashes here.

File details

Details for the file ddcdatabases-2.0.5-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for ddcdatabases-2.0.5-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 abbe4c4d0a18cb3b86efb26f007d260d6c65845afcd87af021c4b316d616b645
MD5 7bb8571f5e6e712dab89ec64de136cc6
BLAKE2b-256 b903f18c860945f206b65e68c1ce3cf6b79ee4ac6a391e6ac5b20bd1e8fc0be1

See more details on using hashes here.

File details

Details for the file ddcdatabases-2.0.5-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for ddcdatabases-2.0.5-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 49fa9fd433af3bfe00df9e9bb3d326d9a70b03d6e2c3af01075afe025ec4478e
MD5 ba032fe356fa0999de99b8b572b62c9b
BLAKE2b-256 9bd4157352eba3a9576571a4f8b7392bf5b64686f9bdf3e36f033d21df9c2ff6

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