Queer European MD passionate about IT
Browse Source

Merge pull request #6 from dataquestio/feature/srini/sqlite

added solutions
Srini Kadamati 9 years ago
parent
commit
5b09e2da91
1 changed files with 247 additions and 0 deletions
  1. 247 0
      Mission216Solutions.ipynb

+ 247 - 0
Mission216Solutions.ipynb

@@ -0,0 +1,247 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Introduction to the data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "import sqlite3\n",
+    "conn = sqlite3.connect(\"nominations.db\")\n",
+    "schema = conn.execute(\"pragma table_info(nominations);\").fetchall()\n",
+    "first_ten = conn.execute(\"select * from nominations limit 10;\").fetchall()\n",
+    "\n",
+    "for r in schema:\n",
+    "    print(r)\n",
+    "    \n",
+    "for r in first_ten:\n",
+    "    print(r)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Creating the ceremonies table"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "years_hosts = [(2010, \"Steve Martin\"),\n",
+    "               (2009, \"Hugh Jackman\"),\n",
+    "               (2008, \"Jon Stewart\"),\n",
+    "               (2007, \"Ellen DeGeneres\"),\n",
+    "               (2006, \"Jon Stewart\"),\n",
+    "               (2005, \"Chris Rock\"),\n",
+    "               (2004, \"Billy Crystal\"),\n",
+    "               (2003, \"Steve Martin\"),\n",
+    "               (2002, \"Whoopi Goldberg\"),\n",
+    "               (2001, \"Steve Martin\"),\n",
+    "               (2000, \"Billy Crystal\"),\n",
+    "            ]\n",
+    "create_ceremonies = \"create table ceremonies (id integer primary key, year integer, host text);\"\n",
+    "conn.execute(create_ceremonies)\n",
+    "insert_query = \"insert into ceremonies (Year, Host) values (?,?);\"\n",
+    "conn.executemany(insert_query, years_hosts)\n",
+    "\n",
+    "print(conn.execute(\"select * from ceremonies limit 10;\").fetchall())\n",
+    "print(conn.execute(\"pragma table_info(ceremonies);\").fetchall())"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Foreign key constraints"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "conn.execute(\"PRAGMA foreign_keys = ON;\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Setting up one-to-many"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "create_nominations_two = '''create table nominations_two \n",
+    "(id integer primary key, \n",
+    "category text, \n",
+    "nominee text, \n",
+    "movie text, \n",
+    "character text, \n",
+    "won text, \n",
+    "foreign key(ceremony_id) references ceremonies(id));\n",
+    "'''\n",
+    "\n",
+    "nom_query = '''\n",
+    "select ceremonies.id as ceremony_id, nominations.category as category, \n",
+    "nominations.nominee as nominee, nominations.movie as movie, \n",
+    "nominations.character as character, nominations.won as won\n",
+    "from nominations\n",
+    "inner join ceremonies \n",
+    "on nominations.year == ceremonies.year\n",
+    ";\n",
+    "'''\n",
+    "joined_nominations = conn.execute(nom_query).fetchall()\n",
+    "\n",
+    "conn.execute(create_nominations_two)\n",
+    "\n",
+    "insert_nominations_two = '''insert into nominations_two (ceremony_id, category, nominee, movie, character, won) \n",
+    "values (?,?,?,?,?,?);\n",
+    "'''\n",
+    "\n",
+    "conn.executemany(insert_nominations_two, joined_nominations)\n",
+    "print(conn.execute(\"select * from nominations_two limit 5;\").fetchall())"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Deleting and renaming tables"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "drop_nomimations = \"drop table nominations;\"\n",
+    "conn.execute(drop_nominations_two)\n",
+    "\n",
+    "rename_nominations_two = \"alter table nominations_two rename to nominations;\"\n",
+    "conn.execute(rename_nominations_two)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Creating a join table"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "create_movies = \"create table movies (id integer primary key,movie text);\"\n",
+    "create_actors = \"create table actors (id integer primary key,actor text);\"\n",
+    "create_movies_actors = '''create table movies_actors (id INTEGER PRIMARY KEY,\n",
+    "movie_id INTEGER references movies(id), actor_id INTEGER references actors(id));\n",
+    "'''\n",
+    "conn.execute(create_movies)\n",
+    "conn.execute(create_actors)\n",
+    "conn.execute(create_movies_actors)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Populating the movies and actors tables"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "insert_movies = \"insert into movies (movie) select distinct movie from nominations;\"\n",
+    "insert_actors = \"insert into actors (actor) select distinct nominee from nominations;\"\n",
+    "conn.execute(insert_movies)\n",
+    "conn.execute(insert_actors)\n",
+    "\n",
+    "print(conn.execute(\"select * from movies limit 5;\").fetchall())\n",
+    "print(conn.execute(\"select * from actors limit 5;\").fetchall())"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Populating a join table"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "pairs_query = \"select movie,nominee from nominations;\"\n",
+    "movie_actor_pairs = conn.execute(pairs_query).fetchall()\n",
+    "\n",
+    "join_table_insert = \"insert into movies_actors (movie_id, actor_id) values ((select id from movies where movie == ?),(select id from actors where actor == ?));\"\n",
+    "conn.executemany(join_table_insert,movie_actor_pairs)\n",
+    "\n",
+    "print(conn.execute(\"select * from movies_actors limit 5;\").fetchall())"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.5.0"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}