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.0.tar.gz (20.5 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.0-py3-none-any.whl (27.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: bamboo_database-0.1.0.tar.gz
  • Upload date:
  • Size: 20.5 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.0.tar.gz
Algorithm Hash digest
SHA256 5271efb7c809999082ac9109bd0fe22d1a2a729e91d470ba07c504895279f2c8
MD5 e9bde540bc8c60070b0ffdaa21f22fdb
BLAKE2b-256 e91606d8ab586565357a27729c4f5fb9818823b022bed6b38863107dc23c2491

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bamboo_database-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3ed69f38fe1d0a2bd4ff97c9fdce209af29880f0b24192ca46d8af0cb01b8d70
MD5 00e1794f5c21f1bbddbc2d782cc9c576
BLAKE2b-256 b3bce1aeffd613b20667f6e76fb4d893bce2bfd601b05838981209af69d73b32

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