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

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.0.tar.gz (13.0 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.0-cp313-cp313-win_amd64.whl (16.0 kB view details)

Uploaded CPython 3.13Windows x86-64

ddcdatabases-2.0.0-cp313-cp313-manylinux_2_39_x86_64.whl (15.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

ddcdatabases-2.0.0-cp313-cp313-macosx_14_0_arm64.whl (15.9 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

ddcdatabases-2.0.0-cp312-cp312-win_amd64.whl (16.0 kB view details)

Uploaded CPython 3.12Windows x86-64

ddcdatabases-2.0.0-cp312-cp312-manylinux_2_39_x86_64.whl (15.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

ddcdatabases-2.0.0-cp312-cp312-macosx_14_0_arm64.whl (15.9 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

File details

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

File metadata

  • Download URL: ddcdatabases-2.0.0.tar.gz
  • Upload date:
  • Size: 13.0 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.0.tar.gz
Algorithm Hash digest
SHA256 6f46153d611190e651a62e3f13eeb299aa3b09e81171c7cc18a1e3a61f975c2f
MD5 aa5db29e9c891859751d30e5418f44d7
BLAKE2b-256 149f95492bac19166e12121fee7dbb875e74a2171c38dd4c70b072b5fc5b8db9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ddcdatabases-2.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 295b8c9ee47873487a74994d1f6d54b637b81be554543c69b28d4073ac75eff0
MD5 52dad7126e23e933d703ee060c1f68d1
BLAKE2b-256 0d212c03194492757513b964b86719494ff3b7b39a32bfdf0562170c0911fb07

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ddcdatabases-2.0.0-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 cc472378e7764fb7d1fc976598b10aa7f39435c45917c879924d983c3f4be7f2
MD5 e4f3286d0a1e58a0d39bbd6dc7dbb91d
BLAKE2b-256 9db48a2b8182d729b2a250cd4e45643d31928c3bbba88e08ddaead6746d67cee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ddcdatabases-2.0.0-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 79983d5b8120a7779b23b9d838cedec198b84c1097fe0e5b621e396f6059bbca
MD5 234823688d6c3aae3e94861c38b2fc00
BLAKE2b-256 eacb12bea7cce9fcf600a95f4ae02c412eb15220fe9170ee39ac6a1279b4e1dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ddcdatabases-2.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b58c046f36be7f1a3b2a35cd924aba66d728d71735f87e7acf033d820b47dee2
MD5 4fe310f25033e042e6b2fe9223b808a0
BLAKE2b-256 581d3d2d64c12fa2b80c2edc4cbd4ae9b66f62763770c3f51b3030b66f42161c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ddcdatabases-2.0.0-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 e1167e15d48d6afdd3effce783870d2a8b2a39b0ec6c05dd1ec0c21353dff6de
MD5 3f9fc36e59103ed85721e316445ed2f0
BLAKE2b-256 a504e55479d45e30ff23d37c782799688b7b83e222f6714d53f96e93ca6ff1e0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ddcdatabases-2.0.0-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 16a48aefc4a41acc014dd99a2833b0c58832c136c0a4de066b893137f76be5f0
MD5 6e0d3e285872eb8d364fc89dd26d6197
BLAKE2b-256 879492b92683d4667a9ff5b0e74ca5396bd6c431a4facc8b6aa75cdf18f0795a

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