Python28 min read

Python SQLAlchemy

Use SQLAlchemy to work with databases safely: define models, insert/query/update/delete data, and build real applications without writing raw SQL everywhere.

David Miller
July 29, 2025
6.2k166

SQLAlchemy is an ORM (Object Relational Mapper).

        Meaning:
        - you work with Python classes
        - SQLAlchemy converts that into SQL queries
        - it helps prevent SQL injection
        - it makes code easier to maintain
        
        ## Install SQLAlchemy
        
        ```bash
        pip install sqlalchemy
        ```
        
        ## Step 1: Create a model (table as class)
        
        ```python
        from sqlalchemy import create_engine, Column, Integer, String
        from sqlalchemy.orm import declarative_base, sessionmaker
        
        Base = declarative_base()
        
        class User(Base):
            __tablename__ = "users"
        
            id = Column(Integer, primary_key=True)
            name = Column(String)
            email = Column(String)
        
        engine = create_engine("sqlite:///users.db")
        Base.metadata.create_all(engine)
        
        Session = sessionmaker(bind=engine)
        session = Session()
        ```
        
        ## Step 2: Insert data
        
        ```python
        user = User(name="Tom", email="tom@example.com")
        session.add(user)
        session.commit()
        ```
        
        ## Step 3: Query data
        
        ```python
        users = session.query(User).all()
        for u in users:
            print(u.name, u.email)
        
        tom = session.query(User).filter_by(name="Tom").first()
        print(tom.email)
        ```
        
        ## Step 4: Update
        
        ```python
        tom = session.query(User).filter_by(name="Tom").first()
        tom.email = "tom_new@example.com"
        session.commit()
        ```
        
        ## Step 5: Delete
        
        ```python
        tom = session.query(User).filter_by(name="Tom").first()
        session.delete(tom)
        session.commit()
        ```
        
        ## Relationships (one-to-many)
        
        ```python
        from sqlalchemy import ForeignKey
        from sqlalchemy.orm import relationship
        
        class Post(Base):
            __tablename__ = "posts"
            id = Column(Integer, primary_key=True)
            title = Column(String)
            user_id = Column(Integer, ForeignKey("users.id"))
        
            user = relationship("User", backref="posts")
        ```
        
        ## Graph: ORM mapping concept
        
        ```mermaid
        flowchart LR
          A[Python class User] --> B[Table users]
          C[User object] --> D[Row in users]
          E[session.query] --> F[SQL executed safely]
        ```
        
        ## Remember
        
        - Session is your DB work unit
        - Always commit after changes
        - ORM keeps code cleaner than raw SQL in many apps
        
#Python#Advanced#Database