codeflash/code_to_optimize/User_post.py

56 lines
1.5 KiB
Python
Raw Normal View History

2024-10-13 23:09:41 +00:00
from __future__ import annotations
2024-05-31 01:24:44 +00:00
2024-10-13 01:58:44 +00:00
from sqlalchemy import ForeignKey, Integer, String, create_engine
2024-05-31 01:23:22 +00:00
from sqlalchemy.engine.base import Engine
2024-10-13 01:58:44 +00:00
from sqlalchemy.orm import (
DeclarativeBase,
Mapped,
Relationship,
Session,
mapped_column,
relationship,
sessionmaker,
)
2024-05-31 01:23:22 +00:00
# Custom base class
class Base(DeclarativeBase):
pass
engine: Engine = create_engine('sqlite:///example.db')
2024-05-31 01:24:44 +00:00
session_factory = sessionmaker(bind=engine)
session: Session = session_factory()
2024-05-31 01:23:22 +00:00
2024-05-31 01:24:44 +00:00
class User(Base):
__tablename__: str = 'users'
2024-05-31 01:23:22 +00:00
id: Mapped[int] = mapped_column(Integer, primary_key=True)
name: Mapped[str] = mapped_column(String)
posts: Relationship[list[Post]] = relationship("Post", order_by="Post.id", back_populates="user")
2024-05-31 01:24:44 +00:00
class Post(Base):
__tablename__: str = 'posts'
2024-05-31 01:23:22 +00:00
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
user_id: Mapped[int] = mapped_column(Integer, ForeignKey('users.id'))
user: Relationship[User] = relationship("User", back_populates="posts")
Base.metadata.create_all(engine)
def get_user_posts() -> dict[User, list[Post]]:
users: list[User] = session.query(User).all() # Query all users
user_posts: dict[User, list[Post]] = {}
for u in users:
user_posts[u] = session.query(Post).filter(Post.user_id == u.id).all()
return user_posts
# Example usage
for user, posts in get_user_posts().items():
print(f"User: {user.name}, Posts: {[post.title for post in posts]}")