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.3.tar.gz (15.1 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.3-cp313-cp313-win_amd64.whl (16.1 kB view details)

Uploaded CPython 3.13Windows x86-64

ddcdatabases-2.0.3-cp313-cp313-manylinux_2_39_x86_64.whl (16.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

ddcdatabases-2.0.3-cp313-cp313-macosx_14_0_arm64.whl (16.0 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

ddcdatabases-2.0.3-cp312-cp312-win_amd64.whl (16.1 kB view details)

Uploaded CPython 3.12Windows x86-64

ddcdatabases-2.0.3-cp312-cp312-manylinux_2_39_x86_64.whl (16.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

ddcdatabases-2.0.3-cp312-cp312-macosx_14_0_arm64.whl (16.0 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

File details

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

File metadata

  • Download URL: ddcdatabases-2.0.3.tar.gz
  • Upload date:
  • Size: 15.1 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.3.tar.gz
Algorithm Hash digest
SHA256 aa091cf4141d07996ca653a98cc6f3df66d3d84231d91d843f6cca5c1ffe854d
MD5 e22af389e9935b15e208800d155a84b6
BLAKE2b-256 4959e2528b836aa2847809e57fb8322f646954dad7fe6c79e68ad13d2072fa57

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ddcdatabases-2.0.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 95a676d05cebd3727eb262a173eece8c043c5136d1bcb2942d21a4f01a0d4088
MD5 ee3cf13ea56acb39dd0e5a705566325e
BLAKE2b-256 0e14df81944ab14c2042ce7e8fb58c790576762df10b62581cffe63065f02b3d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ddcdatabases-2.0.3-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 3589d771e08bd839262223d775ebf75793a9282f6cf52d0a1b70867f7eb1f4ce
MD5 b80688da5bea75f927d1298bd572cf60
BLAKE2b-256 f6070597e743a13185d09e8a708cd7a6e5455b0c55b4a8c89f508f8027d18997

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ddcdatabases-2.0.3-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7b59c243ba678659b0a75f059a60fcc2c84f1750cd6b92038defe64b0f75b748
MD5 e07184b93ee164f7cb51d250d31e04a6
BLAKE2b-256 d6c4da281b2ec023895781154001da569241e1e28ec72d7928e0e6b4af5615e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ddcdatabases-2.0.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 435fa2b9235d42e8b8fa5fc9c1c338ecf29ba439b6015d990ebeb0c80cde9452
MD5 95f55e399de405ed09cf01487c9c1451
BLAKE2b-256 dc717481e7cda95657359db9b226d1eca93fad222cd3d4a947df65ffde3aaf3e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ddcdatabases-2.0.3-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 c06ae982dd5f0db1724b8aed84e2296de4ce5f63a7d30db307598536117935d6
MD5 6061d8823cf22af808ce84472f250da2
BLAKE2b-256 9e130ea21843fca468ec7aecc1c1a43245155f3376b05a776c4f1f5aba7800fe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ddcdatabases-2.0.3-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f89996cc116d6de6edc968e744106b5cd642a1d2cd8dfb4feed8e48e6ca0262e
MD5 f53d28d0e3d8384e8d46f376812b406d
BLAKE2b-256 bf1d93310cc8820d783f76124b28c8f56cd69f2662c526da4702ef3dee0feb42

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