From ca81ada6b8168f0b19a56a62a37465efd43148b4 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Wed, 7 Aug 2019 23:23:42 -0400 Subject: [PATCH] add db insert and query that uses the mapping table --- video_metadata/schema.sql | 2 +- video_metadata/views/tmdb.py | 62 +++++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/video_metadata/schema.sql b/video_metadata/schema.sql index edc1b95..51bf6f9 100644 --- a/video_metadata/schema.sql +++ b/video_metadata/schema.sql @@ -29,12 +29,12 @@ CREATE TABLE movie_details( title text, overview text, release_date date, + original_language text, poster_path text ); DROP TABLE IF EXISTS movie_query_mapping; CREATE TABLE movie_query_mapping( - query text, query_id int, movie_id int, foreign key(query_id) references movie_queries(query_id), diff --git a/video_metadata/views/tmdb.py b/video_metadata/views/tmdb.py index 9435e73..57f6c5b 100644 --- a/video_metadata/views/tmdb.py +++ b/video_metadata/views/tmdb.py @@ -176,27 +176,28 @@ def makeLocalQuery(query_obj): cur = conn.cursor() results = [] - if query_obj.query_type == query_type.MOVIE: - cur.execute('SELECT * FROM movie_queries WHERE query=?', (query_obj.parsed_query_str,)) - elif query_obj.query_type == query_type.TV_SHOW: - pass - - rows = cur.fetchall() - logger.debug('number of rows matched: "{}"'.format(len(rows))) - - if len(rows) > 0: - logger.debug('query string "{}", match found in local db'.format( - query_obj.parsed_query_str) - ) - - for row in rows: - vr = view_result() - vr.title = row["query"] - results.append(vr) - else: - logger.debug('query string "{}", no matches found in local db'.format( - query_obj.parsed_query_str) - ) + fancy_query = '''SELECT + md.* + FROM + movie_queries mq + JOIN movie_query_mapping map ON mq.query_id = map.query_id + JOIN movie_details md ON md.movie_id = map.movie_id + WHERE + mq.query = ?''' + + for row in cur.execute(fancy_query, (query_obj.parsed_query_str, )): + vr = view_result() + vr.id = row['movie_id'] + vr.title = row['title'] + vr.overview = row['overview'] + vr.release_date = row['release_date'] + vr.original_language = row['original_language'] + vr.tmdb_link = "{}{}{}".format(TMDB_MOVIE_LINK_URL, '/', vr.id) + + if row['poster_path'] != None: + vr.poster_path = row['poster_path'] + + results.append(vr) return results @@ -271,24 +272,35 @@ def parseTMDBResult(result, query_type): def storeTMDBQueryResults(query_obj, result_list): conn = db.get_db() cur = conn.cursor() + query_id = 0 logger.debug('adding query string "{}" into local cache'.format(query_obj.parsed_query_str)) try: + cur.execute('BEGIN TRANSACTION') cur.execute('INSERT INTO movie_queries(query, year) VALUES (?, ?)', (query_obj.parsed_query_str, query_obj.movie_year) ) + query_id = cur.lastrowid except DatabaseError as e: query_obj.errors.append(e) for result in result_list: try: cur.execute("INSERT INTO movie_details(" - + "movie_id, title, overview, release_date, poster_path)" - + " VALUES (?,?,?,?,?)", - (result.id, result.title, result.overview, result.release_date, result.poster_path) + + "movie_id, title, overview, release_date, original_language, poster_path)" + + " VALUES (?,?,?,?,?,?)", + (result.id, result.title, result.overview, result.release_date, + result.original_language, result.poster_path) + ) + + cur.execute("INSERT INTO movie_query_mapping(query_id, movie_id)" + + " VALUES (?,?)", (query_id, result.id) ) except DatabaseError as e: query_obj.errors.append(e) - conn.commit() + if len(query_obj.errors) == 0: + conn.commit() + else: + conn.rollback()