Skip to main content

CLI tool for managing database migrations and seed data across multiple backends

Project description

Bamboo Database

A CLI tool for managing database structure (schema/migrations) and seed data across multiple database backends using raw SQL.

Features

  • Multi-Database Support: PostgreSQL, MySQL, and SQLite
  • Raw SQL Migrations: Full control with database-specific syntax
  • Combined Migrations: Schema changes and seed data in single atomic transactions
  • Per-Database Configuration: Separate migration folders for each database profile
  • Schema Generation: Auto-generate organized schema files from migrations
  • AI-Friendly Rules: Generate migration guidelines for AI assistants

Installation

# Basic installation (SQLite only)
pip install bamboo-database

# With PostgreSQL support
pip install bamboo-database[postgresql]

# With MySQL support
pip install bamboo-database[mysql]

# With all database backends
pip install bamboo-database[all]

# Development installation
pip install bamboo-database[dev]

Quick Start

1. Create Configuration

Create bamboo_database.toml in your project root:

[databases.default]
type = "postgresql"
host = "localhost"
port = 5432
database = "my_database"
user = "postgres"
password = "secret"
migrations_path = "./migrations/default"

[databases.analytics]
type = "mysql"
host = "localhost"
port = 3306
database = "analytics_db"
user = "root"
password = "secret"
migrations_path = "./migrations/analytics"

[databases.cache]
type = "sqlite"
path = "./cache.db"
migrations_path = "./migrations/cache"

2. Create Migration Files

Create migration files in your migrations folder:

-- migrations/default/0001_migrate_create_users.sql
BEGIN;

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    email VARCHAR(255) NOT NULL UNIQUE,
    name VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO users (id, email, name) VALUES
    (1, 'admin@example.com', 'Admin User')
ON CONFLICT (id) DO NOTHING;

COMMIT;

3. Run Migrations

# Migrate all databases
bamboodb migrate

# Migrate specific database
bamboodb migrate --database default

# Check migration status
bamboodb status

# List configured databases
bamboodb list-databases

CLI Commands

Command Description
bamboodb migrate Run pending migrations
bamboodb status Show migration status
bamboodb list-databases List configured databases
bamboodb generate-schema Generate schema files from migrations
bamboodb generate-rules Generate AI migration guidelines

Common Options

  • --database NAME - Target specific database (can be used multiple times)
  • --help - Show help for any command

Migration File Naming

Files are named with type prefixes:

  • {version}_migrate_{description}.sql - Schema changes (CREATE, ALTER, DROP)
  • {version}_seed_{description}.sql - Initial/reference data
  • {version}_index_{description}.sql - Index creation

Version format: 4-digit zero-padded (0001, 0002, 0003...)

Examples:

  • 0001_migrate_create_users.sql
  • 0002_seed_insert_admin_user.sql
  • 0003_index_users_email_idx.sql

Idempotent Seed Data

Use database-specific syntax for idempotent inserts:

PostgreSQL:

INSERT INTO users (id, email) VALUES (1, 'admin@example.com')
ON CONFLICT (id) DO NOTHING;

MySQL:

INSERT IGNORE INTO users (id, email) VALUES (1, 'admin@example.com');

SQLite:

INSERT OR IGNORE INTO users (id, email) VALUES (1, 'admin@example.com');

Python API

from bamboo_database import load_config, create_adapter

# Load configuration
config = load_config()

# Get a database profile
profile = config.get_database("default")

# Create an adapter
with create_adapter(profile) as adapter:
    adapter.execute("SELECT * FROM users")
    results = adapter.fetch_all("SELECT * FROM users")

Requirements

  • Python 3.10+
  • Database drivers (optional):
    • PostgreSQL: psycopg[binary]
    • MySQL: mysql-connector-python
    • SQLite: Built-in

License

MIT License - see LICENSE for details.

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

bamboo_database-0.1.1.tar.gz (21.6 kB view details)

Uploaded Source

Built Distribution

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

bamboo_database-0.1.1-py3-none-any.whl (29.8 kB view details)

Uploaded Python 3

File details

Details for the file bamboo_database-0.1.1.tar.gz.

File metadata

  • Download URL: bamboo_database-0.1.1.tar.gz
  • Upload date:
  • Size: 21.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for bamboo_database-0.1.1.tar.gz
Algorithm Hash digest
SHA256 ac306db60f59d55763966eadaa863f6c0796365c3b4fe6d5dba36793f42438f5
MD5 e25f64999d2223604dcf6c48428e8a26
BLAKE2b-256 98faa3d75948d834a93a6bd7ad15a1025ebfc87dfbef6557a3d95827810eef08

See more details on using hashes here.

File details

Details for the file bamboo_database-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for bamboo_database-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d4b07fa561206f6b6e84df2e4a143adb0f44e13a42cc3a167f12524a10580923
MD5 6be4bfb283476ae6bc79343578a81cb5
BLAKE2b-256 74d57e134dabc6489e4157126a392dcb1046d014f78f3c1ed8cbe92be8c2910a

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