Loading User and Posts with Minimal Data

  • Share this:

Code introduction


This code defines a function that loads a user and all their posts from the database, loading only the user's name and email, as well as the titles and contents of all posts.


Technology Stack : SQLAlchemy, SQLAlchemy-Utils

Code Type : The type of code

Code Difficulty : Intermediate


                
                    
from sqlalchemy.orm import load_only
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker
import random

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String, unique=True)
    posts = relationship("Post", back_populates="author")

class Post(Base):
    __tablename__ = 'posts'
    id = Column(Integer, primary_key=True)
    title = Column(String)
    content = Column(String)
    author_id = Column(Integer, ForeignKey('users.id'))
    author = relationship("User", back_populates="posts")

def load_user_with_posts(user_id, session):
    try:
        user = session.query(User).options(load_only(User.name, User.email)).get(user_id)
        if user:
            user.posts = session.query(Post).options(load_only(Post.title, Post.content)).all()
        return user
    except SQLAlchemyError as e:
        print(f"An error occurred: {e}")
        return None