@@ -141,7 +141,11 @@ class PasswordResetToken(db.Model):
141141 used_at = db .Column (db .DateTime , nullable = True )
142142 created_at = db .Column (db .DateTime , default = lambda : datetime .now (timezone .utc ))
143143
144- user = db .relationship ('User' , backref = db .backref ('password_reset_tokens' , lazy = 'dynamic' ))
144+ user = db .relationship (
145+ 'User' ,
146+ backref = db .backref ('password_reset_tokens' , lazy = 'dynamic' ),
147+ lazy = 'joined'
148+ )
145149
146150
147151class Book (db .Model , SoftDeleteMixin ):
@@ -306,9 +310,22 @@ def validate_shelf_type(self, key, value):
306310 return value
307311
308312 # Relationships
309- user = db .relationship ('User' , backref = db .backref ('shelf_items' , lazy = True ))
310- book = db .relationship ('Book' , backref = db .backref ('shelf_items' , lazy = True ))
311- price_alerts = db .relationship ('PriceAlert' , backref = 'shelf_item' , lazy = True , cascade = 'all, delete-orphan' )
313+ user = db .relationship (
314+ 'User' ,
315+ backref = db .backref ('shelf_items' , lazy = 'subquery' ),
316+ lazy = 'joined'
317+ )
318+ book = db .relationship (
319+ 'Book' ,
320+ backref = db .backref ('shelf_items' , lazy = 'subquery' ),
321+ lazy = 'joined'
322+ )
323+ price_alerts = db .relationship (
324+ 'PriceAlert' ,
325+ backref = db .backref ('shelf_item' , lazy = 'joined' ),
326+ lazy = 'subquery' ,
327+ cascade = 'all, delete-orphan'
328+ )
312329
313330 # =========================================================================
314331 # DATABASE LEVEL CONSTRAINTS
@@ -403,7 +420,11 @@ class ReadingGoal(db.Model, SoftDeleteMixin):
403420 updated_at = db .Column (db .DateTime , default = lambda : datetime .now (timezone .utc ), onupdate = lambda : datetime .now (timezone .utc ))
404421
405422 # Relationships
406- user = db .relationship ('User' , backref = db .backref ('reading_goals' , lazy = True ))
423+ user = db .relationship (
424+ 'User' ,
425+ backref = db .backref ('reading_goals' , lazy = 'subquery' ),
426+ lazy = 'joined'
427+ )
407428
408429 __table_args__ = (
409430 db .UniqueConstraint ('user_id' , 'year' , name = 'uq_user_year_goal' ),
@@ -434,7 +455,11 @@ class ReadingStats(db.Model, SoftDeleteMixin):
434455 updated_at = db .Column (db .DateTime , default = lambda : datetime .now (timezone .utc ), onupdate = lambda : datetime .now (timezone .utc ))
435456
436457 # Relationships
437- user = db .relationship ('User' , backref = db .backref ('reading_stats' , lazy = True ))
458+ user = db .relationship (
459+ 'User' ,
460+ backref = db .backref ('reading_stats' , lazy = 'subquery' ),
461+ lazy = 'joined'
462+ )
438463
439464 __table_args__ = (
440465 db .UniqueConstraint ('user_id' , 'year' , 'month' , name = 'uq_user_year_month_stats' ),
@@ -466,8 +491,17 @@ class Collection(db.Model, SoftDeleteMixin):
466491 updated_at = db .Column (db .DateTime , default = lambda : datetime .now (timezone .utc ), onupdate = lambda : datetime .now (timezone .utc ))
467492
468493 # Relationships
469- user = db .relationship ('User' , backref = db .backref ('collections' , lazy = True ))
470- items = db .relationship ('CollectionItem' , backref = 'collection' , lazy = True , cascade = 'all, delete-orphan' )
494+ user = db .relationship (
495+ 'User' ,
496+ backref = db .backref ('collections' , lazy = 'subquery' ),
497+ lazy = 'joined'
498+ )
499+ items = db .relationship (
500+ 'CollectionItem' ,
501+ backref = db .backref ('collection' , lazy = 'joined' ),
502+ lazy = 'subquery' ,
503+ cascade = 'all, delete-orphan'
504+ )
471505
472506 __table_args__ = (
473507 db .UniqueConstraint ('user_id' , 'name' , name = 'uq_user_collection_name' ),
@@ -499,7 +533,11 @@ class CollectionItem(db.Model, SoftDeleteMixin):
499533 added_at = db .Column (db .DateTime , default = lambda : datetime .now (timezone .utc ))
500534
501535 # Relationships
502- book = db .relationship ('Book' , backref = db .backref ('collection_items' , lazy = True ))
536+ book = db .relationship (
537+ 'Book' ,
538+ backref = db .backref ('collection_items' , lazy = 'subquery' ),
539+ lazy = 'joined'
540+ )
503541
504542 __table_args__ = (
505543 db .UniqueConstraint ('collection_id' , 'book_id' , name = 'uq_collection_book' ),
@@ -565,7 +603,11 @@ class PriceHistory(db.Model, SoftDeleteMixin):
565603 checked_at = db .Column (db .DateTime , default = lambda : datetime .now (timezone .utc ))
566604
567605 # Relationships
568- book = db .relationship ('Book' , backref = db .backref ('price_history' , lazy = True ))
606+ book = db .relationship (
607+ 'Book' ,
608+ backref = db .backref ('price_history' , lazy = 'subquery' ),
609+ lazy = 'joined'
610+ )
569611
570612 __table_args__ = (
571613 db .Index ('idx_price_history_book_retailer' , 'book_id' , 'retailer' ),
@@ -599,7 +641,11 @@ class PriceAlert(db.Model, SoftDeleteMixin):
599641 updated_at = db .Column (db .DateTime , default = lambda : datetime .now (timezone .utc ), onupdate = lambda : datetime .now (timezone .utc ))
600642
601643 # Relationships
602- user = db .relationship ('User' , backref = db .backref ('price_alerts' , lazy = True ))
644+ user = db .relationship (
645+ 'User' ,
646+ backref = db .backref ('price_alerts' , lazy = 'subquery' ),
647+ lazy = 'joined'
648+ )
603649
604650 __table_args__ = (
605651 db .UniqueConstraint ('user_id' , 'shelf_item_id' , name = 'uq_user_shelf_item_alert' ),
@@ -638,8 +684,16 @@ class Review(db.Model, SoftDeleteMixin):
638684 updated_at = db .Column (db .DateTime , default = lambda : datetime .now (timezone .utc ), onupdate = lambda : datetime .now (timezone .utc ))
639685
640686 # Relationships
641- user = db .relationship ('User' , backref = db .backref ('reviews' , lazy = True ))
642- book = db .relationship ('Book' , backref = db .backref ('reviews' , lazy = True ))
687+ user = db .relationship (
688+ 'User' ,
689+ backref = db .backref ('reviews' , lazy = 'subquery' ),
690+ lazy = 'joined'
691+ )
692+ book = db .relationship (
693+ 'Book' ,
694+ backref = db .backref ('reviews' , lazy = 'subquery' ),
695+ lazy = 'joined'
696+ )
643697
644698 __table_args__ = (
645699 db .UniqueConstraint ('user_id' , 'book_id' , name = 'uq_user_book_review' ),
@@ -681,8 +735,16 @@ class JournalEntry(db.Model, SoftDeleteMixin):
681735 updated_at = db .Column (db .DateTime , default = lambda : datetime .now (timezone .utc ), onupdate = lambda : datetime .now (timezone .utc ))
682736
683737 # Relationships
684- user = db .relationship ('User' , backref = db .backref ('journal_entries' , lazy = True ))
685- book = db .relationship ('Book' , backref = db .backref ('journal_entries' , lazy = True ))
738+ user = db .relationship (
739+ 'User' ,
740+ backref = db .backref ('journal_entries' , lazy = 'subquery' ),
741+ lazy = 'joined'
742+ )
743+ book = db .relationship (
744+ 'Book' ,
745+ backref = db .backref ('journal_entries' , lazy = 'subquery' ),
746+ lazy = 'joined'
747+ )
686748
687749 def to_dict (self ):
688750 return {
0 commit comments