Skip to content

Commit a5d94c2

Browse files
52 - Loading Related data with sqlalchemy joinloaded
1 parent 3627166 commit a5d94c2

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

full_stack_python/blog/list.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@ def blog_post_detail_link(child: rx.Component, post: BlogPostModel):
1515
post_detail_url = f"{root_path}/{post_id}"
1616
return rx.link(
1717
child,
18+
rx.heading("by ", post.userinfo.email),
1819
href=post_detail_url
1920
)
2021

2122
def blog_post_list_item(post: BlogPostModel):
2223
return rx.box(
2324
blog_post_detail_link(
2425
rx.heading(post.title),
26+
2527
post
2628
),
2729
padding='1em'

full_stack_python/blog/state.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
from typing import Optional, List
33
import reflex as rx
44

5+
import sqlalchemy
56
from sqlmodel import select
67

78
from .. import navigation
89
from ..auth.state import SessionState
9-
from ..models import BlogPostModel
10+
from ..models import BlogPostModel, UserInfo
1011

1112
BLOG_POSTS_ROUTE = navigation.routes.BLOG_POSTS_ROUTE
1213
if BLOG_POSTS_ROUTE.endswith("/"):
@@ -39,14 +40,15 @@ def get_post_detail(self):
3940
if self.blog_post_id == "":
4041
self.post = None
4142
return
42-
result = session.exec(
43-
select(BlogPostModel).where(
44-
(BlogPostModel.id == self.blog_post_id)
45-
)
46-
).one_or_none()
47-
if result.userinfo: # db lookup
48-
print('working')
49-
# result.userinfo.user
43+
sql_statement = select(BlogPostModel).options(
44+
sqlalchemy.orm.joinedload(BlogPostModel.userinfo).joinedload(UserInfo.user)
45+
).where(
46+
(BlogPostModel.id == self.blog_post_id)
47+
)
48+
result = session.exec(sql_statement).one_or_none()
49+
# if result.userinfo: # db lookup
50+
# print('working')
51+
# result.userinfo.user # db lookup
5052
self.post = result
5153
if result is None:
5254
self.post_content = ""
@@ -65,7 +67,9 @@ def load_posts(self, published_only=False):
6567
)
6668
with rx.session() as session:
6769
result = session.exec(
68-
select(BlogPostModel).where(
70+
select(BlogPostModel).options(
71+
sqlalchemy.orm.joinedload(BlogPostModel.userinfo)
72+
).where(
6973
*lookup_args
7074
)
7175
).all()

0 commit comments

Comments
 (0)