Metadata-Version: 2.4
Name: py-dockerdb
Version: 0.4.0
Summary: Python package for working with databases in Docker containers
Home-page: https://github.com/amadou-6e/docker-db.git
Author: Amadou Wolfgang Cisse
Author-email: amadou.6e@googlemail.com
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Topic :: Database
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: psycopg2-binary
Requires-Dist: docker
Requires-Dist: pytest
Requires-Dist: pymongo
Requires-Dist: pydantic
Requires-Dist: setuptools
Requires-Dist: docker
Requires-Dist: pyodbc
Requires-Dist: mysql-connector-python
Requires-Dist: pydos2unix
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# Docker-DB

A Python library for managing containerized databases through Docker. This library provides a simple interface for creating, configuring, and managing database containers for development and testing environments, from within python.

## Features

The following features are supported:

- Easy setup and management of database containers
- Automated container lifecycle management
- Standardized configuration interfaces
- Connection management and health checking
- Volume persistence capabilities
- Initialization script support

The following features are implemented but not tested:
- Enable/Disable error if already created
- startdb
- restartdb
- init scripts to examples

The following databases are supported:
  - MongoDB
  - Microsoft SQL Server
  - PostgreSQL
  - MySQL

These databases might be added in the future:
- Cassandra

## Installation

```bash
pip install py-dockerdb
```

## Requirements

- Python 3.7+
- Docker installed and running
- Database-specific Python drivers:
  - `pymongo` for MongoDB
  - `pyodbc` for Microsoft SQL Server
  - `psycopg2` for PostgreSQL
  - `mysql-connector-python` for MySQL

## Basic Usage

Check out the following usage examples:

### MongoDB Example

```python
from docker_db.mongodb import MongoDBConfig, MongoDB

# Create configuration
config = MongoDBConfig(
    user="testuser",
    password="testpass",
    database="testdb",
    root_username="admin",
    root_password="adminpass",
    container_name="test-mongodb"
)

# Create and start MongoDB container
db = MongoDB(config)
db.create_db()

# Connect to database
client = db.connection
# Use the database...

# Stop the container when done
db.stop_db()

# Completely remove the container
db.delete_db()
```

### PostgreSQL Example

```python
from docker_db.postgres import PostgresConfig, PostgresDB

# Create configuration
config = PostgresConfig(
    user="testuser",
    password="testpass",
    database="testdb",
    container_name="test-postgres"
)

# Create and start PostgreSQL container
db = PostgresDB(config)
db.create_db()

# Connect to the database
conn = db.connection

# Create a cursor and execute a query
cursor = conn.cursor()
cursor.execute("SELECT version();")
version = cursor.fetchone()
print(f"PostgreSQL version: {version[0]}")

# Clean up
cursor.close()
db.stop_db()
```

### Working with Initialization Scripts

All database managers support initialization scripts that can be executed when the container is created:

```python
from pathlib import Path
from docker_db.mongodb import MongoDBConfig, MongoDB

config = MongoDBConfig(
    user="testuser",
    password="testpass",
    database="testdb",
    root_username="admin",
    root_password="adminpass",
    container_name="test-mongodb",
    init_script=Path("./path/to/init_script.js")
)
```

### Custom Volume Paths

You can specify custom volume paths to persist data between container restarts:

```python
from pathlib import Path
from docker_db.mssql import MSSQLConfig, MSSQLDB

config = MSSQLConfig(
    user="testuser",
    password="testpass",
    database="testdb",
    sa_password="StrongPassword123!",
    container_name="test-mssql",
    volume_path=Path("./data/mssql")
)
```

## License

This project is licensed under the MIT License - see the LICENSE file for details.
