pset 7
houses
Implement a program to import student data into a database, and then produce class rosters.
$ python import.py characters.csv$ python roster.py Gryffindor
Lavender Brown, born 1979Colin Creevey, born 1981Seamus Finnigan, born 1979Hermione Jean Granger, born 1979Neville Longbottom, born 1980Parvati Patil, born 1979Harry James Potter, born 1980Dean Thomas, born 1980Romilda Vane, born 1981Ginevra Molly Weasley, born 1981Ronald Bilius Weasley, born 1980- characters.csv
- import.py
- roster.py
- students.db
characters.csv example:
name,house,birthAdelaide Murton,Slytherin,1982Adrian Pucey,Slytherin,1977Anthony Goldstein,Ravenclaw,1980Blaise Zabini,Slytherin,1979# TODOimport sysimport csvfrom cs50 import SQL
if len(sys.argv) != 2: print("Usage: python import.py spreadsheet.csv") sys.exit(1)
db = SQL("sqlite:///students.db")with open(sys.argv[1], 'r') as csvfile: reader = csv.DictReader(csvfile) for row in reader: name = row["name"].split() first = name[0] middle = name[1] if len(name) == 3 else None last = name[2] if len(name) == 3 else name[1] db.execute("INSERT INTO students (first, middle, last, house, birth) VALUES (?, ?, ?, ?, ?)", first, middle, last, row["house"], row["birth"])# TODOfrom cs50 import SQLimport sys
if len(sys.argv) != 2: print("Usage: python roster.py Housename") sys.exit(1)
db = SQL("sqlite:///students.db")lst = db.execute("SELECT * FROM students WHERE house = ? ORDER BY last, first", sys.argv[1])for row in lst: print(row["first"], end=' ') if row["middle"] != None: print(row["middle"], end=' ') print(row["last"] + ', ' + "born", row["birth"])movies
Write SQL queries to answer questions about a database of movies.
- 1.sql
- 2.sql
- 3.sql
- 4.sql
- 5.sql
- 6.sql
- 7.sql
- 8.sql
- 9.sql
- 10.sql
- 11.sql
- 12.sql
- 13.sql
- movies.db
-- 1.sqlSELECT titleFROM moviesWHERE year = 2008;-- 2.sqlSELECT birthFROM peopleWHERE name = "Emma Stone";-- 3.sqlSELECT titleFROM moviesWHERE year >= 2018ORDER BY title;-- 4.sqlSELECT COUNT(movie_id)FROM ratingsWHERE rating = 10.0;-- 5.sqlSELECT title, yearFROM moviesWHERE title LIKE "Harry Potter%"ORDER BY year;-- 6.sqlSELECT AVG(rating)FROM ratings JOIN moviesON ratings.movie_id=movies.idWHERE movies.year = 2012;-- 7.sqlSELECT movies.title, ratings.ratingFROM ratings JOIN moviesON ratings.movie_id=movies.idWHERE movies.year = 2010 AND ratings.rating IS NOT NULLORDER BY ratings.rating DESC, movies.title ASC;-- 8.sqlSELECT people.nameFROM people JOIN starsON people.id=stars.person_idWHERE stars.movie_id IN(SELECT idFROM moviesWHERE title = "Toy Story");-- 9.sqlSELECT DISTINCT people.nameFROM people JOIN starsON people.id=stars.person_idWHERE stars.movie_id IN(SELECT idFROM moviesWHERE year = 2004)ORDER BY people.birth;-- 10.sqlSELECT people.nameFROM people JOIN directorsON people.id=directors.person_idWHERE directors.movie_id IN(SELECT movie_idFROM ratingsWHERE rating >= 9.0);-- 11.sqlSELECT movies.titleFROM movies JOIN ratingsON movies.id=ratings.movie_idWHERE ratings.movie_id IN(SELECT stars.movie_idFROM stars JOIN peopleON stars.person_id=people.idWHERE people.name = "Chadwick Boseman")ORDER BY ratings.rating DESCLIMIT 5;-- 12.sqlSELECT movies.titleFROM movies JOIN starsON movies.id=stars.movie_idWHERE stars.person_id = (SELECT id FROM people WHERE name = "Johnny Depp")OR stars.person_id = (SELECT id FROM people WHERE name = "Helena Bonham Carter")GROUP BY movies.idHAVING COUNT(movies.id) > 1;-- 13.sqlSELECT people.nameFROM people JOIN starsON people.id=stars.person_idWHERE stars.movie_id IN (SELECT stars.movie_idFROM stars JOIN peopleON stars.person_id=people.idWHERE people.name = "Kevin Bacon" AND people.birth = 1958)AND NOT people.name = "Kevin Bacon";