def imdb_query(session): import time from progressbar import ETA, Bar, Percentage, ProgressBar from sqlalchemy.orm import joinedload_all from sqlalchemy.sql.expression import select # NOTE: importing other plugins directly is discouraged from flexget.components.imdb.db import Movie from flexget.plugins.cli.performance import log_query_count imdb_urls = [] logger.info('Getting imdb_urls ...') # query so that we avoid loading whole object (maybe cached?) for _, url in session.execute(select([Movie.id, Movie.url])): imdb_urls.append(url) logger.info('Got {} urls from database', len(imdb_urls)) if not imdb_urls: logger.info('so .. aborting') return # commence testing widgets = [ 'Benchmarking - ', ETA(), ' ', Percentage(), ' ', Bar(left='[', right=']') ] bar = ProgressBar(widgets=widgets, maxval=len(imdb_urls)).start() log_query_count('test') start_time = time.time() for index, url in enumerate(imdb_urls): bar.update(index) # movie = session.query(Movie).filter(Movie.url == url).first() # movie = session.query(Movie).options(subqueryload(Movie.genres)).filter(Movie.url == url).one() movie = (session.query(Movie).options( joinedload_all(Movie.genres, Movie.languages, Movie.actors, Movie.directors)).filter(Movie.url == url).first()) # access it's members so they're loaded [x.name for x in movie.genres] [x.name for x in movie.directors] [x.name for x in movie.actors] [x.name for x in movie.languages] log_query_count('test') took = time.time() - start_time logger.debug('Took %.2f seconds to query %i movies' % (took, len(imdb_urls)))
def imdb_query(session): import time # NOTE: importing other plugins directly is discouraged from flexget.components.imdb.utils_lookup import Movie from flexget.plugins.cli.performance import log_query_count from sqlalchemy.sql.expression import select from progressbar import ProgressBar, Percentage, Bar, ETA from sqlalchemy.orm import joinedload_all imdb_urls = [] log.info('Getting imdb_urls ...') # query so that we avoid loading whole object (maybe cached?) for _, url in session.execute(select([Movie.id, Movie.url])): imdb_urls.append(url) log.info('Got %i urls from database' % len(imdb_urls)) if not imdb_urls: log.info('so .. aborting') return # commence testing widgets = ['Benchmarking - ', ETA(), ' ', Percentage(), ' ', Bar(left='[', right=']')] bar = ProgressBar(widgets=widgets, maxval=len(imdb_urls)).start() log_query_count('test') start_time = time.time() for index, url in enumerate(imdb_urls): bar.update(index) # movie = session.query(Movie).filter(Movie.url == url).first() # movie = session.query(Movie).options(subqueryload(Movie.genres)).filter(Movie.url == url).one() movie = ( session.query(Movie) .options(joinedload_all(Movie.genres, Movie.languages, Movie.actors, Movie.directors)) .filter(Movie.url == url) .first() ) # access it's members so they're loaded [x.name for x in movie.genres] [x.name for x in movie.directors] [x.name for x in movie.actors] [x.name for x in movie.languages] log_query_count('test') took = time.time() - start_time log.debug('Took %.2f seconds to query %i movies' % (took, len(imdb_urls)))
def imdb_query(session): import time from rich.progress import track from sqlalchemy.orm import joinedload from sqlalchemy.sql.expression import select # NOTE: importing other plugins directly is discouraged from flexget.components.imdb.db import Movie from flexget.plugins.cli.performance import log_query_count imdb_urls = [] logger.info('Getting imdb_urls ...') # query so that we avoid loading whole object (maybe cached?) for _, url in session.execute(select([Movie.id, Movie.url])): imdb_urls.append(url) logger.info('Got {} urls from database', len(imdb_urls)) if not imdb_urls: logger.info('so .. aborting') return # commence testing log_query_count('test') start_time = time.time() for url in track(imdb_urls, description='Benchmarking...'): # movie = session.query(Movie).filter(Movie.url == url).first() # movie = session.query(Movie).options(subqueryload(Movie.genres)).filter(Movie.url == url).one() movie = (session.query(Movie).options( joinedload(Movie.genres), joinedload(Movie.languages), joinedload(Movie.actors), joinedload(Movie.directors), ).filter(Movie.url == url).first()) # access it's members so they're loaded [x.name for x in movie.genres] [x.name for x in movie.directors] [x.name for x in movie.actors] [x.language for x in movie.languages] log_query_count('test') took = time.time() - start_time logger.debug('Took %.2f seconds to query %i movies' % (took, len(imdb_urls)))