Skip to content

Commit 9625b00

Browse files
committed
Update notebooks
1 parent 50f455f commit 9625b00

5 files changed

Lines changed: 204 additions & 36 deletions

File tree

chapters/01/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
<div class="row mt-3 mb-3">
4747
<div class="col-sm">
4848

49-
<a class="btn btn-outline-primary btn-sm" href="../08/"><i class="fa fa-backward fa-fw" aria-hidden="true"></i>&nbsp;Previous</a>
49+
<a class="btn btn-outline-primary btn-sm" href="../09/"><i class="fa fa-backward fa-fw" aria-hidden="true"></i>&nbsp;Previous</a>
5050

5151

5252
<span class="float-right"><a class="btn btn-outline-primary btn-sm" href="../02/">Next&nbsp;<i class="fa fa-forward fa-fw" aria-hidden="true"></i></a></span>
@@ -156,7 +156,7 @@ <h1 id="Let's-Create-a-Database!">Let's Create a Database!<a class="anchor-link"
156156
<div class="row mt-3 mb-3">
157157
<div class="col-sm">
158158

159-
<a class="btn btn-outline-primary btn-sm" href="../08/"><i class="fa fa-backward fa-fw" aria-hidden="true"></i>&nbsp;Previous</a>
159+
<a class="btn btn-outline-primary btn-sm" href="../09/"><i class="fa fa-backward fa-fw" aria-hidden="true"></i>&nbsp;Previous</a>
160160

161161

162162
<span class="float-right"><a class="btn btn-outline-primary btn-sm" href="../02/">Next&nbsp;<i class="fa fa-forward fa-fw" aria-hidden="true"></i></a></span>

chapters/08/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<a class="btn btn-outline-primary btn-sm" href="../07/"><i class="fa fa-backward fa-fw" aria-hidden="true"></i>&nbsp;Previous</a>
5050

5151

52-
<span class="float-right"><a class="btn btn-outline-primary btn-sm" href="../01/">Next&nbsp;<i class="fa fa-forward fa-fw" aria-hidden="true"></i></a></span>
52+
<span class="float-right"><a class="btn btn-outline-primary btn-sm" href="../09/">Next&nbsp;<i class="fa fa-forward fa-fw" aria-hidden="true"></i></a></span>
5353

5454
</div>
5555
</div>
@@ -929,7 +929,7 @@ <h1 id="Link-Tables-Together">Link Tables Together<a class="anchor-link" href="#
929929
<a class="btn btn-outline-primary btn-sm" href="../07/"><i class="fa fa-backward fa-fw" aria-hidden="true"></i>&nbsp;Previous</a>
930930

931931

932-
<span class="float-right"><a class="btn btn-outline-primary btn-sm" href="../01/">Next&nbsp;<i class="fa fa-forward fa-fw" aria-hidden="true"></i></a></span>
932+
<span class="float-right"><a class="btn btn-outline-primary btn-sm" href="../09/">Next&nbsp;<i class="fa fa-forward fa-fw" aria-hidden="true"></i></a></span>
933933

934934
</div>
935935
</div>

chapters/09/index.html

Lines changed: 188 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -18,38 +18,40 @@
1818

1919
<body>
2020
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
21+
2122
<a class="navbar-brand" href="#">SQL for Python Programmers</a>
22-
<div class="navbar-collapse collapse">
23+
24+
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarContent" aria-controls="navbarContent" aria-expanded="false" aria-label="Toggle navigation">
25+
<span class="navbar-toggler-icon"></span>
26+
</button>
27+
28+
<div class="collapse navbar-collapse" id="navbarContent">
2329
<div class="navbar-nav">
2430
<a class="nav-item nav-link" href="/sql_python_tutorial/"><i class="fa fa-home fa-fw" aria-hidden="true" title="home"></i>&nbsp;Home</a>
2531
<a class="nav-item nav-link mr-auto" href="/sql_python_tutorial/chapters/"><i class="fa fa-book fa-fw" aria-hidden="true" title="contents"></i>&nbsp;Contents</a>
2632
<a class="nav-item nav-link" href="/sql_python_tutorial/pages/intro"><i class="fa fa-info-circle fa-fw" aria-hidden="true" title="introduction"></i>&nbsp;Introduction</a>
2733
<a class="nav-item nav-link" href="/sql_python_tutorial/pages/howto"><i class="fa fa-gears fa-fw" aria-hidden="true" title="how to"></i>&nbsp;How To</span></a>
2834
<!-- <a class="nav-item nav-link" href="/sql_python_tutorial/pages/primer"><i class="fa fa-database fa-fw" aria-hidden="true" title="primer"></i>&nbsp;Primer</a> -->
2935
</div>
30-
<div class="navbar-collapse collapse">
31-
<div class="navbar-nav ml-auto">
32-
<a class="btn btn-link btn-lg" href="https://twitter.com/opcampbell" title="twitter"><i class="fa fa-twitter" aria-hidden="true"></i></a>
33-
<a class="btn btn-link btn-lg" href="https://www.linkedin.com/in/owencampbell" title="linkedin"><i class="fa fa-linkedin" aria-hidden="true"></i></a>
34-
<a class="btn btn-link btn-lg" href="http://github.com/meatballs" title="github"><i class="fa fa-github" aria-hidden="true"></i></a>
35-
</div>
36+
<div class="navbar-nav ml-auto">
37+
<a class="btn btn-link btn-lg" href="https://twitter.com/opcampbell" title="twitter"><i class="fa fa-twitter" aria-hidden="true"></i></a>
38+
<a class="btn btn-link btn-lg" href="https://www.linkedin.com/in/owencampbell" title="linkedin"><i class="fa fa-linkedin" aria-hidden="true"></i></a>
39+
<a class="btn btn-link btn-lg" href="http://github.com/meatballs" title="github"><i class="fa fa-github" aria-hidden="true"></i></a>
3640
</div>
3741
</div>
3842
</nav>
3943

4044
<main role="main" class="container">
4145

42-
<div class="row mt-5 mb-3">
43-
44-
<div class="col-sm-6">
45-
<a class="btn btn-outline-primary btn-sm" href="../08/"><i class="fa fa-backward fa-fw" aria-hidden="true"></i>&nbsp;Previous</a>
46-
</div>
47-
48-
49-
<div class="col-sm-6">
50-
<span class="float-right"><a class="btn btn-outline-primary btn-sm" href="../10/">Next&nbsp;<i class="fa fa-forward fa-fw" aria-hidden="true"></i></a></span>
51-
</div>
52-
46+
<div class="row mt-3 mb-3">
47+
<div class="col-sm">
48+
49+
<a class="btn btn-outline-primary btn-sm" href="../08/"><i class="fa fa-backward fa-fw" aria-hidden="true"></i>&nbsp;Previous</a>
50+
51+
52+
<span class="float-right"><a class="btn btn-outline-primary btn-sm" href="../01/">Next&nbsp;<i class="fa fa-forward fa-fw" aria-hidden="true"></i></a></span>
53+
54+
</div>
5355
</div>
5456

5557
<div class="row">
@@ -58,26 +60,179 @@
5860
</div>
5961
<div class="inner_cell">
6062
<div class="text_cell_render border-box-sizing rendered_html">
61-
<h1 id="Now-for-Some-Joined-Up-Thinking">Now for Some Joined-Up Thinking<a class="anchor-link" href="#Now-for-Some-Joined-Up-Thinking">&#182;</a></h1>
63+
<h1 id="Extract-The-Data">Extract The Data<a class="anchor-link" href="#Extract-The-Data">&#182;</a></h1><p>We've learned how to create a database, insert data and then update or delete it.</p>
64+
<p>We've also seen how to view the content of a table using pandas.</p>
65+
<p>But we've only seen how to display the entire contents of a single table. What if we only want a subset of the records? What if we want to extract a set based on records in more than one table?</p>
66+
<p>It's time to learn about the SELECT statement.</p>
67+
<p>First, let's connect to our database, empty both tables and create records for three flights.</p>
68+
<p>We'll need to enable foreign keys again as this setting applies to the connection:</p>
69+
6270
</div>
6371
</div>
6472
</div>
73+
<div class="cell border-box-sizing code_cell rendered">
74+
<div class="input">
75+
<div class="prompt input_prompt">In&nbsp;[29]:</div>
76+
<div class="inner_cell">
77+
<div class="input_area">
78+
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">sqlalchemy</span> <span class="k">as</span> <span class="nn">sa</span>
79+
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
80+
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">namedtuple</span>
81+
<span class="n">engine</span> <span class="o">=</span> <span class="n">sa</span><span class="o">.</span><span class="n">create_engine</span><span class="p">(</span><span class="s1">&#39;sqlite:///flight.db&#39;</span><span class="p">)</span>
82+
<span class="n">connection</span> <span class="o">=</span> <span class="n">engine</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
83+
<span class="n">connection</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;PRAGMA foreign_keys=on&quot;</span><span class="p">)</span>
84+
<span class="n">connection</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;DELETE FROM flights&quot;</span><span class="p">)</span>
85+
86+
<span class="n">Flight</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s1">&#39;Flight&#39;</span><span class="p">,</span> <span class="s1">&#39;name country_code&#39;</span><span class="p">)</span>
87+
88+
<span class="n">flights</span> <span class="o">=</span> <span class="p">[</span>
89+
<span class="n">Flight</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;hab1&#39;</span><span class="p">,</span> <span class="n">country_code</span><span class="o">=</span><span class="s1">&#39;GB&#39;</span><span class="p">),</span>
90+
<span class="n">Flight</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;hab2&#39;</span><span class="p">,</span> <span class="n">country_code</span><span class="o">=</span><span class="s1">&#39;GB&#39;</span><span class="p">),</span>
91+
<span class="n">Flight</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;hab3&#39;</span><span class="p">,</span> <span class="n">country_code</span><span class="o">=</span><span class="s1">&#39;US&#39;</span><span class="p">),</span>
92+
<span class="p">]</span>
93+
94+
<span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
95+
<span class="s2"> INSERT INTO flights(name, country_code)</span>
96+
<span class="s2"> VALUES(?, ?)</span>
97+
<span class="s2">&quot;&quot;&quot;</span>
98+
99+
<span class="k">for</span> <span class="n">flight</span> <span class="ow">in</span> <span class="n">flights</span><span class="p">:</span>
100+
<span class="n">connection</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="p">(</span><span class="n">flight</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">flight</span><span class="o">.</span><span class="n">country_code</span><span class="p">))</span>
101+
<span class="n">pd</span><span class="o">.</span><span class="n">read_sql</span><span class="p">(</span><span class="s1">&#39;flights&#39;</span><span class="p">,</span> <span class="n">connection</span><span class="p">)</span>
102+
</pre></div>
103+
104+
</div>
105+
</div>
106+
</div>
107+
108+
<div class="output_wrapper">
109+
<div class="output">
110+
111+
112+
<div class="output_area">
113+
114+
<div class="prompt output_prompt">Out[29]:</div>
115+
116+
117+
118+
<div class="output_html rendered_html output_subarea output_execute_result">
119+
<div>
120+
<style scoped>
121+
.dataframe tbody tr th:only-of-type {
122+
vertical-align: middle;
123+
}
124+
125+
.dataframe tbody tr th {
126+
vertical-align: top;
127+
}
128+
129+
.dataframe thead th {
130+
text-align: right;
131+
}
132+
</style>
133+
<table border="1" class="dataframe">
134+
<thead>
135+
<tr style="text-align: right;">
136+
<th></th>
137+
<th>name</th>
138+
<th>country_code</th>
139+
<th>latitude</th>
140+
<th>longitude</th>
141+
</tr>
142+
</thead>
143+
<tbody>
144+
<tr>
145+
<th>0</th>
146+
<td>hab1</td>
147+
<td>GB</td>
148+
<td>0.0</td>
149+
<td>0.0</td>
150+
</tr>
151+
<tr>
152+
<th>1</th>
153+
<td>hab2</td>
154+
<td>GB</td>
155+
<td>0.0</td>
156+
<td>0.0</td>
157+
</tr>
158+
<tr>
159+
<th>2</th>
160+
<td>hab3</td>
161+
<td>US</td>
162+
<td>0.0</td>
163+
<td>0.0</td>
164+
</tr>
165+
</tbody>
166+
</table>
167+
</div>
168+
</div>
169+
170+
</div>
171+
172+
</div>
173+
</div>
174+
175+
</div>
176+
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
177+
</div>
178+
<div class="inner_cell">
179+
<div class="text_cell_render border-box-sizing rendered_html">
180+
<p>And then generate 20 randomised readings for each flight:</p>
181+
182+
</div>
183+
</div>
184+
</div>
185+
<div class="cell border-box-sizing code_cell rendered">
186+
<div class="input">
187+
<div class="prompt input_prompt">In&nbsp;[30]:</div>
188+
<div class="inner_cell">
189+
<div class="input_area">
190+
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">random</span> <span class="k">import</span> <span class="n">uniform</span><span class="p">,</span> <span class="n">randint</span>
191+
192+
<span class="n">Reading</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s1">&#39;Reading&#39;</span><span class="p">,</span> <span class="s1">&#39;flight, ts, temp, pressure, humidity&#39;</span><span class="p">)</span>
193+
194+
<span class="n">readings</span> <span class="o">=</span> <span class="p">[</span>
195+
<span class="n">Reading</span><span class="p">(</span>
196+
<span class="n">flight</span><span class="o">=</span><span class="n">flight</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
197+
<span class="n">ts</span><span class="o">=</span><span class="n">f</span><span class="s1">&#39;2015-01-01 09:{str(i+1).zfill(2)}:00&#39;</span><span class="p">,</span>
198+
<span class="n">temp</span><span class="o">=</span><span class="nb">round</span><span class="p">(</span><span class="n">uniform</span><span class="p">(</span><span class="mi">23</span><span class="p">,</span> <span class="mi">27</span><span class="p">),</span> <span class="mi">1</span><span class="p">),</span>
199+
<span class="n">pressure</span><span class="o">=</span><span class="n">randint</span><span class="p">(</span><span class="mi">1020</span><span class="p">,</span> <span class="mi">1025</span><span class="p">),</span>
200+
<span class="n">humidity</span><span class="o">=</span><span class="n">randint</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span> <span class="mi">50</span><span class="p">))</span>
201+
<span class="k">for</span> <span class="n">flight</span> <span class="ow">in</span> <span class="n">flights</span>
202+
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span>
203+
<span class="p">]</span>
204+
205+
<span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
206+
<span class="s2">INSERT INTO readings</span>
207+
<span class="s2"> (flight, ts, temp, pressure, humidity)</span>
208+
<span class="s2">VALUES</span>
209+
<span class="s2"> (?, ?, ?, ?, ?)</span>
210+
<span class="s2">&quot;&quot;&quot;</span>
211+
212+
<span class="k">for</span> <span class="n">reading</span> <span class="ow">in</span> <span class="n">readings</span><span class="p">:</span>
213+
<span class="n">values</span> <span class="o">=</span> <span class="p">(</span><span class="n">reading</span><span class="o">.</span><span class="n">flight</span><span class="p">,</span> <span class="n">reading</span><span class="o">.</span><span class="n">ts</span><span class="p">,</span> <span class="n">reading</span><span class="o">.</span><span class="n">temp</span><span class="p">,</span> <span class="n">reading</span><span class="o">.</span><span class="n">pressure</span><span class="p">,</span> <span class="n">reading</span><span class="o">.</span><span class="n">humidity</span><span class="p">)</span>
214+
<span class="n">connection</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
215+
</pre></div>
216+
217+
</div>
218+
</div>
219+
</div>
220+
221+
</div>
65222

66223

67224
</div>
68225
</div>
69226

70-
<div class="row mt-5 mb-3">
71-
72-
<div class="col-sm-6">
73-
<a class="btn btn-outline-primary btn-sm" href="../08/"><i class="fa fa-backward fa-fw" aria-hidden="true"></i>&nbsp;Previous</a>
74-
</div>
75-
76-
77-
<div class="col-sm-6">
78-
<span class="float-right"><a class="btn btn-outline-primary btn-sm" href="../10/">Next&nbsp;<i class="fa fa-forward fa-fw" aria-hidden="true"></i></a></span>
79-
</div>
80-
227+
<div class="row mt-3 mb-3">
228+
<div class="col-sm">
229+
230+
<a class="btn btn-outline-primary btn-sm" href="../08/"><i class="fa fa-backward fa-fw" aria-hidden="true"></i>&nbsp;Previous</a>
231+
232+
233+
<span class="float-right"><a class="btn btn-outline-primary btn-sm" href="../01/">Next&nbsp;<i class="fa fa-forward fa-fw" aria-hidden="true"></i></a></span>
234+
235+
</div>
81236
</div>
82237

83238
</main>
@@ -107,6 +262,8 @@ <h1 id="Now-for-Some-Joined-Up-Thinking">Now for Some Joined-Up Thinking<a class
107262
};
108263
</script>
109264
<script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script>
110-
265+
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
266+
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
267+
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
111268
</body>
112269
</html>

chapters/index.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,17 @@ <h2><i class="fa fa-book fa-fw" aria-hidden="true"></i> Contents</h2>
133133
</div>
134134
</li>
135135

136+
<li class="list-group-item borderless clearfix">
137+
<div class="row">
138+
<div class="col-sm">
139+
<a href=/sql_python_tutorial/chapters/09 class="btn btn-link" role="button"/> Extract The Data</i></a>
140+
</div>
141+
<div class="col-sm">
142+
<a href=notebooks/09-Extract-The-Data.ipynb class="btn btn-outline-light text-dark" role="button"><i class="fa fa-download fa-fw" aria-hidden="true"></i>&nbsp;Download</a>
143+
</div>
144+
</div>
145+
</li>
146+
136147
</ol>
137148

138149
</main>

notebooks

0 commit comments

Comments
 (0)