Exemple #1
0
class Database():

    def __init__(self, app):
        self.mysql = MySQL()
        self.mysql.init_app(app)

    def get_all_users(self):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """SELECT username, email, password FROM Users WHERE is_active = True"""
        cursor.execute(query)
        rows = cursor.fetchall()
        cursor.close()
        users = []
        for row in rows:
            users.append(User(row[0], row[1], row[2]))
        #self.mysql.get_db().close()
        return users


    def get_user(self, username=None, email=None, password=None):
        if email is None and username is None:
            return None
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        first = True
        query = """SELECT username, email, password, is_active FROM Users WHERE """
        if username:
            query += """username = '******'""" % (username)
            first = False
        if email:
            if not first:
                query += """ AND """
            query += """email = '%s'""" % (email)
            first = False
        if password:
            if not first:
                query += """ AND """
            query += """password = '******'""" % (password)
        cursor.execute(query)
        u = cursor.fetchone()
        cursor.close()
        #self.mysql.get_db().close()
        if not u:
            return None
        return User(u[0], u[1], u[2], u[3])

    def insert_user(self, username, email, password):
        if (not (username and email and password)):
            return None
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        statement = """INSERT INTO Users (username, email, password) VALUES ('%s', '%s', '%s')""" % (username, email, password)
        cursor.execute(statement)
        self.mysql.get_db().commit()
        cursor.close()
        #self.mysql.get_db().close()
        return User(username, email, password)

    def update_user(self, username, email=None, password=None, is_active=True):
        if (not (username) or not (email or password)):
            return None
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        statement = """UPDATE Users SET is_active = %s""" % (str(is_active))
        if email:
            statement += """, email = '%s'""" % email
        if password:
            statement += """, password = '******'""" % password
        statement += """ WHERE username = '******'""" % username
        cursor.execute(statement)
        self.mysql.get_db().commit()
        cursor.close()
        #self.mysql.get_db().close()
        return User(username, email, password)


    def get_all_players(self):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """SELECT player_id, first_name, last_name, nfl_team FROM Players"""
        cursor.execute(query)
        rows = cursor.fetchall()
        cursor.close()
        players = []
        for row in rows:
            players.append(Player(row[0], row[1], row[2], row[3]))
        #self.mysql.get_db().close()
        return players


    def get_player(self, player_id=None, first_name=None, last_name=None, nfl_team=None):
        if player_id is None and first_name is None and last_name is None and nfl_team is None:
            return None
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        first = True
        query = """SELECT player_id, first_name, last_name, nfl_team FROM Players WHERE """
        if player_id:
            query += """player_id = '%s'""" % (player_id)
            first = False
        if first_name:
            if not first:
                query += """ AND """
            query += """first_name = '%s'""" % (first_name)
            first = False
        if last_name:
            if not first:
                query += """ AND """
            query += """last_name = '%s'""" % (last_name)
            first = False
        if nfl_team:
            if not first:
                query += """ AND """
            query += """nfl_team = '%s'""" % (nfl_team)
            first = False
        cursor.execute(query)
        p = cursor.fetchone()
        cursor.close()
        #self.mysql.get_db().close()
        if not p:
            return None
        return Player(p[0], p[1], p[2], p[3])

    def insert_player(self, player_id, first_name, last_name, nfl_team):
        if (not (player_id and first_name and nfl_team)):
            return None
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        statement = """INSERT INTO Players (player_id, first_name, last_name, nfl_team) VALUES ('%s', '%s', '%s', '%s')""" % \
                        (player_id, first_name, last_name, nfl_team)
        try:
            cursor.execute(statement)
            self.mysql.get_db().commit()
            cursor.close()
            self.mysql.get_db().close()
        except Exception, e:
            print e
        return Player(player_id, first_name, last_name, nfl_team)
Exemple #2
0
class Database():
    def __init__(self, app):
        self.mysql = MySQL()
        self.mysql.init_app(app)

    def get_all_users(self):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """SELECT username, email, password FROM Users WHERE is_active = True"""
        cursor.execute(query)
        rows = cursor.fetchall()
        cursor.close()
        users = []
        for row in rows:
            users.append(User(row[0], row[1], row[2]))
        #self.mysql.get_db().close()
        return users

    def get_user(self, username=None, email=None, password=None):
        if email is None and username is None:
            return None
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        first = True
        query = """SELECT username, email, password, is_active FROM Users WHERE """
        if username:
            query += """username = '******'""" % (username)
            first = False
        if email:
            if not first:
                query += """ AND """
            query += """email = '%s'""" % (email)
            first = False
        if password:
            if not first:
                query += """ AND """
            query += """password = '******'""" % (password)
        cursor.execute(query)
        u = cursor.fetchone()
        cursor.close()
        #self.mysql.get_db().close()
        if not u:
            return None
        return User(u[0], u[1], u[2], u[3])

    def insert_user(self, username, email, password):
        if (not (username and email and password)):
            return None
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        statement = """INSERT INTO Users (username, email, password) VALUES ('%s', '%s', '%s')""" % (
            username, email, password)
        cursor.execute(statement)
        self.mysql.get_db().commit()
        cursor.close()
        #self.mysql.get_db().close()
        return User(username, email, password)

    def update_user(self, username, email=None, password=None, is_active=True):
        if (not (username) or not (email or password)):
            return None
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        statement = """UPDATE Users SET is_active = %s""" % (str(is_active))
        if email:
            statement += """, email = '%s'""" % email
        if password:
            statement += """, password = '******'""" % password
        statement += """ WHERE username = '******'""" % username
        cursor.execute(statement)
        self.mysql.get_db().commit()
        cursor.close()
        #self.mysql.get_db().close()
        return User(username, email, password)

    def get_all_players(self):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """SELECT player_id, first_name, last_name, nfl_team FROM Players"""
        cursor.execute(query)
        rows = cursor.fetchall()
        cursor.close()
        players = []
        for row in rows:
            players.append(Player(row[0], row[1], row[2], row[3]))
        #self.mysql.get_db().close()
        return players

    def get_player(self,
                   player_id=None,
                   first_name=None,
                   last_name=None,
                   nfl_team=None):
        if player_id is None and first_name is None and last_name is None and nfl_team is None:
            return None
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        first = True
        query = """SELECT player_id, first_name, last_name, nfl_team FROM Players WHERE """
        if player_id:
            query += """player_id = '%s'""" % (player_id)
            first = False
        if first_name:
            if not first:
                query += """ AND """
            query += """first_name = '%s'""" % (first_name)
            first = False
        if last_name:
            if not first:
                query += """ AND """
            query += """last_name = '%s'""" % (last_name)
            first = False
        if nfl_team:
            if not first:
                query += """ AND """
            query += """nfl_team = '%s'""" % (nfl_team)
            first = False
        cursor.execute(query)
        p = cursor.fetchone()
        cursor.close()
        #self.mysql.get_db().close()
        if not p:
            return None
        return Player(p[0], p[1], p[2], p[3])

    def insert_player(self, player_id, first_name, last_name, nfl_team):
        if (not (player_id and first_name and nfl_team)):
            return None
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        statement = """INSERT INTO Players (player_id, first_name, last_name, nfl_team) VALUES ('%s', '%s', '%s', '%s')""" % \
                        (player_id, first_name, last_name, nfl_team)
        try:
            cursor.execute(statement)
            self.mysql.get_db().commit()
            cursor.close()
            self.mysql.get_db().close()
        except Exception, e:
            print e
        return Player(player_id, first_name, last_name, nfl_team)
Exemple #3
0
class Database(object):

    def __init__(self, app):
        self.mysql = MySQL()
        self.mysql.init_app(app)

    ####### USERS #######

    def get_all_users(self):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """SELECT uid, uname, email, pass FROM Users WHERE is_active = True"""
        cursor.execute(query)
        rows = cursor.fetchall()
        cursor.close()
        users = []
        for row in rows:
            users.append(User(row[0], row[1], row[2], row[3]))
        return users

    def get_user(self, username=None, email=None, password=None, dob=None):
        if email is None and username is None:
            return None
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        first = True
        query = """SELECT uid, uname, email, pass, udob FROM Users WHERE """
        if username:
            query += """uname = '%s'""" % (username)
            first = False
        if email:
            if not first:
                query += """ AND """
            query += """email = '%s'""" % (email)
            first = False
        if password:
            if not first:
                query += """ AND """
            query += """pass = '******'""" % (password)
        if dob:
            if not first:
                query += """ AND """
            query += """udob = '%s'""" % (dob)
        cursor.execute(query)
        u = cursor.fetchone()
        cursor.close()
        if not u:
            return None
        return User(u[1], u[2], u[3], u[4], u[0])

    def insert_user(self, username, email, password, dob):
        if (not (username and email and password)):
            return None
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        statement = """INSERT INTO Users (uname, email, pass, udob) VALUES ('%s', '%s', '%s', '%s')""" % (username, email, password, dob)
        cursor.execute(statement)
        self.mysql.get_db().commit()
        cursor.close()
        return User(username, email, password, dob)

    def update_user(self, username, email=None, password=None, is_active=True):
        if (not (username) or not (email or password)):
            return None
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        statement = """UPDATE Users SET is_active = %s""" % (str(is_active))
        if email:
            statement += """, email = '%s'""" % email
        if password:
            statement += """, pass = '******'""" % password
        statement += """WHERE uname = '%s'""" % unsername
        cursor.execute(statement)
        self.mysql.get_db().commit()
        cursor.close()
        return User(username, email, password)

    ####### MOVIES #######

    def get_people_like(self, pname, limit=10):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """SELECT pid, pname FROM People WHERE pname LIKE '%s%%' OR pname LIKE '%%%s' OR pname LIKE '%%%s%%' LIMIT %s;""" % (pname, pname, pname, limit)
        cursor.execute(query)
        results = cursor.fetchall()
        cursor.close()
        r = []
        for result in results:
            r.append(dict(id=result[0],name=result[1]))
        return json.dumps(r)

    def get_movies_like(self, title, limit=5):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """SELECT mid, title FROM Movies WHERE title LIKE '%s%%' OR title LIKE '%%%s' OR title LIKE '%%%s%%' LIMIT %s;""" % (title, title, title, limit)
        cursor.execute(query)
        results = cursor.fetchall()
        cursor.close()
        r = []
        for result in results:
            r.append(dict(id=result[0],name=result[1]))
        return json.dumps(r)

    def get_genres_like(self, gname, limit=5):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """SELECT gid, gname FROM Genres WHERE gname LIKE '%s%%' OR gname LIKE '%%%s' OR gname LIKE '%%%s%%' LIMIT %s;""" % (gname, gname, gname, limit)
        cursor.execute(query)
        results = cursor.fetchall()
        cursor.close()
        r = []
        for result in results:
            r.append(dict(id=result[0],name=result[1]))
        return json.dumps(r)

    def get_movie_by_id(self, mid):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        cols = "mid,title,mdate,runtime,languages,description,budget,box_office,country"
        query = """SELECT %s FROM Movies WHERE mid='%s';""" % (cols, mid)
        cursor.execute(query)
        movie = list(cursor.fetchone())
        cursor.close()
        r = {}
        lcols = cols.split(",")
        movie[2] = movie[2].year
        for (num,val) in enumerate(movie):
            r[lcols[num]] = val
        return Movie(*r)

    def get_movie_by_id(self, mid):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        cols = "mid,title,mdate,runtime,languages,description,budget,box_office,country"
        #mids = ','.join(["'%s'" % (val) for val in mid])
        query = """SELECT %s FROM Movies WHERE mid='%s';""" % (cols, mid)
        cursor.execute(query)
        results = cursor.fetchone()
        cursor.close()
        if not results:
            return None
        movie = list(results)
        if movie[2]:
            movie[2] = movie[2].year
        return Movie(*movie)

    def get_people_from_movie(self, mid):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        cols = "People.pid,pname,pdob"
        lcols = cols.split(",")
        query = """SELECT %s FROM Involved_In INNER JOIN People ON People.pid=Involved_In.pid WHERE mid='%s'""" % (cols, mid)
        cursor.execute(query)
        results = cursor.fetchall()
        cursor.close()
        results = [list(result) for result in results]
        people = []
        for person in results:
            if person[2]:
                person[2] = person[2].year
            else:
                person[2] = '0000'
            people.append(Person(*person))
        return people

    def get_all_credits_by_person(self, pid):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        cols = "Movies.mid,Movies.title,directed,produced,wrote,composed,acted"
        lcols = cols.split(",")
        query = """SELECT %s FROM Involved_In INNER JOIN Movies ON Involved_In.mid=Movies.mid WHERE pid='%s'""" % (cols, pid)
        cursor.execute(query)
        results = list(cursor.fetchall())
        cursor.close()
        credits = []
        for credit in results:
            c = {}
            for (num,val) in enumerate(credit):
                c[lcols[num]] = val
                credits.append(c)
        return json.dumps(credits)

    def get_movie_credits_by_person(self, mid, pid):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        cols = "pid,mid,directed,produced,wrote,composed,acted"
        lcols = cols.split(",")
        query = """SELECT %s FROM Involved_In WHERE pid='%s' AND mid='%s'""" % (cols, pid, mid)
        cursor.execute(query)
        results = list(cursor.fetchone())
        cursor.close()
        credit = Credit(*results)
        return credit

    def get_genre(self, mid):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        cols = "gid,gname"
        query = """SELECT %s FROM Genres WHERE gid IN (SELECT gid FROM Is_Genre WHERE mid='%s');""" % (cols,mid)
        cursor.execute(query)
        results = cursor.fetchall()
        cursor.close()
        results = [list(result) for result in results]
        genres = [Genre(*x) for x in results]
        return genres

    def get_movies_by_genre(self, gid, limit=20):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """SELECT mid FROM Is_Genre WHERE gid=%s ORDER BY RAND() LIMIT %s;""" % (gid, limit)
        cursor.execute(query)
        results = cursor.fetchall()
        cursor.close()
        results = [result[0] for result in results]
        return results #mids

    def get_genre_name(self, gid):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """SELECT gname FROM Genres WHERE gid=%s;""" % (gid)
        cursor.execute(query)
        results = cursor.fetchone()
        cursor.close()
        if not results:
            return None
        result = results[0]
        return result

    def get_person_name(self, pid):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """SELECT pname FROM People WHERE pid=%s;""" % (pid)
        cursor.execute(query)
        results = cursor.fetchone()
        cursor.close()
        if not results:
            return None
        result = results[0]
        return result #pids

    def get_movies_by_person(self, pid):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        cols = "Involved_In.mid,mdate,title,directed,produced,wrote,composed,acted"
        query = """SELECT %s FROM Involved_In JOIN Movies ON Involved_In.mid=Movies.mid WHERE pid=%s;""" % (cols,pid)
        cursor.execute(query)
        results = cursor.fetchall()
        cursor.close()
        lcols = cols.split(",")
        lcols[0] = "mid"
        if not results:
            return None
        results = [list(result) for result in results]
        for i in xrange(len(results)):
            if results[i][1]:
                results[i][1] = results[i][1].year
        movies = []
        for idx1,m in enumerate(results):
            tmp = {}
            for idx2,col in enumerate(lcols):
                tmp[col]=m[idx2]
            movies.append(DTmp(**tmp))
        return movies

    def rate(self, table, uid, pkey_name, oid, rating):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """INSERT INTO %s (uid,%s,urating) VALUES ('%s','%s','%s') ON DUPLICATE KEY UPDATE urating=VALUES(urating)""" % (table, pkey_name, uid, oid, rating)
        cursor.execute(query)
        results = cursor.fetchone()
        self.mysql.get_db().commit()
        cursor.close()
        if not results:
            return None
        results = list(results)
        return results

    def get_rating(self, table, uid, pkey_name, oid):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """SELECT urating FROM %s WHERE uid=%s AND %s='%s';""" % (table, uid, pkey_name, oid)
        cursor.execute(query)
        results = cursor.fetchone()
        cursor.close()
        if not results:
            return False, 0
        return True, results[0]

    def recommend(self, uid, limit=15):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """
            SELECT mid,title
            FROM Movies
            WHERE mid IN (
                SELECT DISTINCT(mid)
                FROM Movies
                WHERE mid IN (
                    SELECT mid
                    FROM Involved_In
                    WHERE pid IN (
                        SELECT pid
                        FROM Likes_Person
                        WHERE uid={0}
                        ORDER BY urating DESC
                    )
                )
                OR mid IN (
                    SELECT mid
                    FROM Involved_In
                    WHERE pid IN (
                        SELECT pid
                        FROM Involved_In
                        JOIN Has_Watched
                        ON Involved_In.mid=Has_Watched.mid
                        WHERE uid={0}
                        ORDER BY urating DESC
                    )
                )
            )
            AND mid NOT IN (
                SELECT mid
                FROM Has_Watched
                WHERE uid={0}
            )
            ORDER BY RAND()
            LIMIT {1};"""
        query = query.format(uid, limit)

        cursor.execute(query)
        results = cursor.fetchall()
        cursor.close()
        results = [DTmp(**{'mid': r[0], 'title': r[1]}) for r in results]
        return results

    def recommend_better(self, uid, limit=30):
        self.mysql.before_request()
        cursor = self.mysql.get_db().cursor()
        query = """
            SELECT m.mid,m.title,i.pid,AVG(Likes_Person.urating) AS urt
            FROM Movies m
            JOIN Involved_In i
            ON m.mid=i.mid
            LEFT OUTER JOIN Likes_Person
            ON i.pid=Likes_Person.pid
            WHERE m.mid IN (
                SELECT DISTINCT(mm.mid)
                FROM Movies mm
                WHERE mm.mid IN (
                    SELECT ii.mid
                    FROM Involved_In ii
                    WHERE ii.pid IN (
                        SELECT lp.pid
                        FROM Likes_Person lp
                        WHERE uid={0}
                        ORDER BY lp.urating DESC
                    )
                )
                OR mm.mid IN (
                    SELECT iii.mid
                    FROM Involved_In iii
                    WHERE iii.pid IN (
                        SELECT iiii.pid
                        FROM Involved_In iiii
                        JOIN Has_Watched hhhh
                        ON iiii.mid=hhhh.mid
                        WHERE uid={0}
                        ORDER BY hhhh.urating DESC
                    )
                )
            )
            AND m.mid NOT IN (
                SELECT hw.mid
                FROM Has_Watched hw
                WHERE uid={0}
            )
            GROUP BY m.mid
            ORDER BY urt DESC
            LIMIT {1};"""
        query = query.format(uid, limit)

        cursor.execute(query)
        results = cursor.fetchall()
        cursor.close()
        results = [DTmp(**{'mid': r[0], 'title': r[1], 'score': r[3] if r[3] else float(0.0)}) for r in results]
        return results