diff --git a/lib/galaxy/model/item_attrs.py b/lib/galaxy/model/item_attrs.py index 90e236ec7fa8..998536e07b7d 100644 --- a/lib/galaxy/model/item_attrs.py +++ b/lib/galaxy/model/item_attrs.py @@ -1,5 +1,6 @@ import logging +from sqlalchemy import select from sqlalchemy.sql.expression import func # Cannot import galaxy.model b/c it creates a circular import graph. @@ -27,13 +28,13 @@ def get_ave_item_rating_data(self, db_session, item, webapp_model=None): if not item_rating_assoc_class: raise Exception(f"Item does not have ratings: {item.__class__.__name__}") item_id_filter = self._get_item_id_filter_str(item, item_rating_assoc_class) - ave_rating = db_session.query(func.avg(item_rating_assoc_class.rating)).filter(item_id_filter).scalar() + ave_rating = db_session.scalar(select(func.avg(item_rating_assoc_class.rating)).where(item_id_filter)) # Convert ave_rating to float; note: if there are no item ratings, ave rating is None. if ave_rating: ave_rating = float(ave_rating) else: ave_rating = 0 - num_ratings = int(db_session.query(func.count(item_rating_assoc_class.rating)).filter(item_id_filter).scalar()) + num_ratings = db_session.scalar(select(func.count(item_rating_assoc_class.rating)).where(item_id_filter)) return (ave_rating, num_ratings) def rate_item(self, db_session, user, item, rating, webapp_model=None): @@ -65,7 +66,9 @@ def get_user_item_rating(self, db_session, user, item, webapp_model=None): # Query rating table by user and item id. item_id_filter = self._get_item_id_filter_str(item, item_rating_assoc_class) - return db_session.query(item_rating_assoc_class).filter_by(user=user).filter(item_id_filter).first() + return db_session.scalars( + select(item_rating_assoc_class).filter_by(user=user).where(item_id_filter).limit(1) + ).first() def _get_item_rating_assoc_class(self, item, webapp_model=None): """Returns an item's item-rating association class.""" @@ -118,7 +121,7 @@ def get_item_annotation_obj(db_session, user, item): return None # Get annotation association object. - annotation_assoc = db_session.query(annotation_assoc_class).filter_by(user=user) + annotation_assoc = select(annotation_assoc_class).filter_by(user=user) if item.__class__ == galaxy.model.History: annotation_assoc = annotation_assoc.filter_by(history=item) @@ -134,7 +137,7 @@ def get_item_annotation_obj(db_session, user, item): annotation_assoc = annotation_assoc.filter_by(page=item) elif item.__class__ == galaxy.model.Visualization: annotation_assoc = annotation_assoc.filter_by(visualization=item) - return annotation_assoc.first() + return db_session.scalars(annotation_assoc.limit(1)).first() def get_item_annotation_str(db_session, user, item):