Ad – 728Γ—90
πŸ—„οΈ Real-World

Python Database Programming – SQLite & SQLAlchemy

Python works with virtually every database. The built-in sqlite3 module requires zero setup; SQLAlchemy provides an ORM for larger projects.

⏱️ 20 min read🎯 Real-WorldπŸ“… Updated 2026

SQLite – Zero Setup

Python
import sqlite3

conn = sqlite3.connect("myapp.db")
conn.row_factory = sqlite3.Row
cursor = conn.cursor()

cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        email TEXT UNIQUE NOT NULL
    )
''')

cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ("Alice", "alice@example.com"))
conn.commit()

cursor.execute("SELECT * FROM users WHERE name = ?", ("Alice",))
user = cursor.fetchone()
print(dict(user))
conn.close()

Context Manager Pattern

Python
from contextlib import contextmanager

@contextmanager
def get_db(path="myapp.db"):
    conn = sqlite3.connect(path)
    conn.row_factory = sqlite3.Row
    try:
        yield conn
        conn.commit()
    except Exception:
        conn.rollback()
        raise
    finally:
        conn.close()

with get_db() as db:
    db.execute("INSERT INTO users (name, email) VALUES (?, ?)", ("Bob", "bob@example.com"))
    users = db.execute("SELECT * FROM users").fetchall()

SQLAlchemy ORM

Python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import DeclarativeBase, Session

engine = create_engine("sqlite:///myapp.db")

class Base(DeclarativeBase):
    pass

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
    email = Column(String, unique=True, nullable=False)

Base.metadata.create_all(engine)

with Session(engine) as session:
    user = User(name="Charlie", email="charlie@example.com")
    session.add(user)
    session.commit()
    all_users = session.query(User).all()
    charlie = session.query(User).filter_by(name="Charlie").first()
    charlie.email = "new@example.com"
    session.commit()
Tip: Use sqlite3 for small apps. Switch to SQLAlchemy + PostgreSQL for concurrent writes or production scale.