🌱 Junior Track 30 of 31

30. Databases & SQL

Connect Python applications to relational databases. Master SQL queries (`SELECT`, `INSERT`, `UPDATE`, `DELETE`, `JOIN`, `GROUP BY`), database engines (SQLite, PostgreSQL, MySQL), Python DB-API (`sqlite3`), parameterized queries against SQL injection, and Object-Relational Mapping (ORM) with SQLAlchemy.

👁️ Views: 0
# ==============================================================================
# JUNIOR PYTHON TRACK 30 — DATABASES & SQL (sqlite3 & DB-API)
# ==============================================================================
import sqlite3

def init_database() -> sqlite3.Connection:
    """Connect to in-memory SQLite database and set Row factory."""
    conn = sqlite3.connect(":memory:")
    conn.row_factory = sqlite3.Row  # Enables dict-like column access
    return conn

def create_tables(conn: sqlite3.Connection):
    """Execute DDL statements to create users and orders tables."""
    with conn:
        conn.execute("""
            CREATE TABLE users (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                username TEXT UNIQUE NOT NULL,
                email TEXT UNIQUE NOT NULL,
                is_active INTEGER DEFAULT 1
            )
        """)
        conn.execute("""
            CREATE TABLE orders (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                user_id INTEGER NOT NULL,
                amount REAL NOT NULL,
                FOREIGN KEY (user_id) REFERENCES users (id)
            )
        """)

def insert_sample_data(conn: sqlite3.Connection):
    """Insert sample rows using parameterized binding (prevents SQL injection)."""
    users = [
        ("shkar_dev", "shkar@teachcloud.org", 1),
        ("alice_py", "alice@example.com", 1),
        ("bob_db", "bob@database.io", 0)
    ]
    orders = [
        (1, 150.50), (1, 49.99), (2, 299.00)
    ]
    with conn:
        conn.executemany("INSERT INTO users (username, email, is_active) VALUES (?, ?, ?)", users)
        conn.executemany("INSERT INTO orders (user_id, amount) VALUES (?, ?)", orders)

def get_user_summary(conn: sqlite3.Connection) -> list[dict]:
    """Perform SELECT query with JOIN, GROUP BY, and ORDER BY."""
    query = """
        SELECT u.username, COUNT(o.id) AS total_orders, COALESCE(SUM(o.amount), 0.0) AS total_spent
        FROM users u
        LEFT JOIN orders o ON u.id = o.user_id
        WHERE u.is_active = 1
        GROUP BY u.id, u.username
        ORDER BY total_spent DESC
    """
    cursor = conn.cursor()
    cursor.execute(query)
    return [{"username": row["username"], "orders": row["total_orders"], "spent": row["total_spent"]} for row in cursor.fetchall()]

if __name__ == "__main__":
    conn = init_database()
    create_tables(conn)
    insert_sample_data(conn)
    
    summary = get_user_summary(conn)
    print("=== Active User Sales Summary (JOIN & GROUP BY) ===")
    for item in summary:
        print(f"User: {item['username']:<12} | Orders: {item['orders']} | Total Spent: ${item['spent']:.2f}")
    
    conn.close()
🌱 Junior Track 30 Master Reference

30. Relational Databases, SQL & Python ORM Guide

🛠️ Core SQL Commands & Clauses

Command / Clause Description Example Syntax
SELECT / FROM Queries columns from target table SELECT name, email FROM users;
WHERE Filters rows matching conditional expression WHERE status = 'active';
JOIN Combines rows from related tables on key JOIN orders ON users.id = orders.user_id
GROUP BY / HAVING Aggregates records and filters grouped data GROUP BY user_id HAVING COUNT(*) > 5
ORDER BY Sorts results ascending or descending ORDER BY created_at DESC;

🗄️ Relational Database Comparison

Database Architecture Key Features Python Driver
SQLite Embedded / File-based Zero configuration, serverless, great for testing & small apps sqlite3 (standard lib)
PostgreSQL Client-Server RDBMS Industrial-grade, rich JSON types, high concurrency, strict ACID psycopg2 / asyncpg
MySQL / MariaDB Client-Server RDBMS High read performance, universal web host support mysql-connector-python

⭐ Rate Track 30: Relational Databases & SQLite (1 to 5 Stars)

Your rating is stored directly in the database. Average: 5.0 / 5 (1 rating)

★ ★ ★ ★ ★
← 29. Regular Expressions 🌱 Junior Hub (30 Modules Complete!) Next Track: 31. APIs & HTTP →