<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Python_and_MySQL</id>
	<title>Python and MySQL - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Python_and_MySQL"/>
	<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;action=history"/>
	<updated>2026-05-18T17:22:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;diff=719&amp;oldid=prev</id>
		<title>PeterHarding at 01:02, 25 January 2008</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;diff=719&amp;oldid=prev"/>
		<updated>2008-01-25T01:02:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:02, 25 January 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l440&quot;&gt;Line 440:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 440:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Note use of &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; operator to insert parameter values. This does &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; provide proper quoting (escaping of &amp;lt;code&amp;gt;&amp;#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Note use of &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; operator to insert parameter values. This does &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; provide proper quoting (escaping of &amp;lt;code&amp;gt;&amp;#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Python]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:MySQL]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;diff=624&amp;oldid=prev</id>
		<title>PeterHarding at 01:40, 7 January 2008</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;diff=624&amp;oldid=prev"/>
		<updated>2008-01-07T01:40:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:40, 7 January 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;= Some General references =&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;See http://www.kitebird.com/articles/pydbapi.html&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;See http://www.kitebird.com/articles/pydbapi.html&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;= python-and-mysql =&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Check this out in [http://www.performiq.com.au/python-and-mysql.html &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;HTML format&lt;/ins&gt;] ...&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Check this out in [&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;HTML format|&lt;/del&gt;http://www.performiq.com.au/python-and-mysql.html] ... &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{html}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div class=&amp;quot;layout&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;currentSlide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div id=&amp;quot;header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div class=&amp;quot;layout&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;currentSlide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div id=&amp;quot;header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;diff=623&amp;oldid=prev</id>
		<title>PeterHarding at 01:39, 7 January 2008</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;diff=623&amp;oldid=prev"/>
		<updated>2008-01-07T01:39:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:39, 7 January 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l5&quot;&gt;Line 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Check this out in [HTML format|http://&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;esbinfo:8090/download/attachments/1704632&lt;/del&gt;/python-and-mysql.html] ... {html}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Check this out in [HTML format|http://&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;www.performiq.com.au&lt;/ins&gt;/python-and-mysql.html] ... {html}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div class=&amp;quot;layout&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;currentSlide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div id=&amp;quot;header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div class=&amp;quot;layout&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;currentSlide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div id=&amp;quot;header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;diff=622&amp;oldid=prev</id>
		<title>PeterHarding at 01:39, 7 January 2008</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;diff=622&amp;oldid=prev"/>
		<updated>2008-01-07T01:39:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:39, 7 January 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;See http://www.kitebird.com/articles/pydbapi.html&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Check this out in [HTML format|http://esbinfo:8090/download/attachments/1704632/python-and-mysql.html] ... {html}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Check this out in [HTML format|http://esbinfo:8090/download/attachments/1704632/python-and-mysql.html] ... {html}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;diff=407&amp;oldid=prev</id>
		<title>PeterHarding at 05:30, 13 December 2007</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;diff=407&amp;oldid=prev"/>
		<updated>2007-12-13T05:30:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;amp;diff=407&amp;amp;oldid=406&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;diff=406&amp;oldid=prev</id>
		<title>PeterHarding: New page: Check this out in [HTML format|http://esbinfo:8090/download/attachments/1704632/python-and-mysql.html] ...  {html} &lt;DIV class=&quot;layout&quot;&gt;  &lt;DIV id=&quot;currentSlide&quot;&gt;&lt;/DIV&gt; &lt;DIV id=&quot;header&quot;&gt;&lt;/DI...</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_and_MySQL&amp;diff=406&amp;oldid=prev"/>
		<updated>2007-12-13T04:58:18Z</updated>

		<summary type="html">&lt;p&gt;New page: Check this out in [HTML format|http://esbinfo:8090/download/attachments/1704632/python-and-mysql.html] ...  {html} &amp;lt;DIV class=&amp;quot;layout&amp;quot;&amp;gt;  &amp;lt;DIV id=&amp;quot;currentSlide&amp;quot;&amp;gt;&amp;lt;/DIV&amp;gt; &amp;lt;DIV id=&amp;quot;header&amp;quot;&amp;gt;&amp;lt;/DI...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Check this out in [HTML format|http://esbinfo:8090/download/attachments/1704632/python-and-mysql.html] ...&lt;br /&gt;
&lt;br /&gt;
{html}&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;layout&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV id=&amp;quot;currentSlide&amp;quot;&amp;gt;&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&amp;lt;DIV id=&amp;quot;header&amp;quot;&amp;gt;&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&amp;lt;DIV id=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;MySQL Users Conference 2005, Santa Clara, CA&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;Python and MySQL&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;DIV id=&amp;quot;controls&amp;quot;&amp;gt;&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;presentation&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Python and MySQL&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;H3&amp;gt;Andy Dustman&amp;lt;/H3&amp;gt;&lt;br /&gt;
&amp;lt;H4&amp;gt;Office of Information Technology&amp;lt;/H4&amp;gt;&lt;br /&gt;
&amp;lt;H4&amp;gt;Terry College of Business&amp;lt;/H4&amp;gt;&lt;br /&gt;
&amp;lt;H4&amp;gt;University of Georgia&amp;lt;/H4&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;handout&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;DL&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;Andy Dustman&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;&amp;lt;A href=&amp;quot;mailto:adustman%40terry.uga.edu&amp;quot;&amp;gt;&amp;lt;/A&amp;gt;&amp;lt;ADUSTMAN&amp;gt;&amp;lt;A href=&amp;quot;mailto:adustman%40terry.uga.edu&amp;quot;&amp;gt;&amp;lt;/A&amp;gt;&amp;lt;/ADUSTMAN&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;Terry College of Business&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;&amp;lt;A href=&amp;quot;http://www.terry.uga.edu/&amp;quot;&amp;gt;http://www.terry.uga.edu/&amp;lt;/A&amp;gt;&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;University of Georgia&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;&amp;lt;A href=&amp;quot;http://www.uga.edu/&amp;quot;&amp;gt;http://www.uga.edu/&amp;lt;/A&amp;gt;&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;/DL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Python for the PyCurious&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;interpreted (byte-code compiler)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;interactive (easy to test ideas)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;object-oriented (everything&amp;#039;s an object)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;rapid development (5-10x C++, Java)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;fits your brain &amp;lt;I&amp;gt;[Bruce Eckel]&amp;lt;/I&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;fits your wallet: free (OSI and GPL)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;fun!&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;handout&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;DL&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;Introductory Material on Python:&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;&amp;lt;A href=&amp;quot;http://www.python.org/doc/Intros.html&amp;quot;&amp;gt;http://www.python.org/doc/Intros.html&amp;lt;/A&amp;gt;&amp;lt;/DD&amp;gt;&amp;lt;/DL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Types&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;DIV id=&amp;quot;typecomparo&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TABLE&amp;gt;&lt;br /&gt;
&amp;lt;THEAD&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt; &amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/TH&amp;gt;&amp;lt;TH scope=&amp;quot;col&amp;quot;&amp;gt;Mutable&amp;lt;/TH&amp;gt; &amp;lt;TH scope=&amp;quot;col&amp;quot;&amp;gt;Immutable&amp;lt;/TH&amp;gt;&amp;lt;/TR&amp;gt;&amp;lt;/THEAD&amp;gt;&lt;br /&gt;
&amp;lt;TBODY&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH scope=&amp;quot;row&amp;quot;&amp;gt;Sequence&amp;lt;/TH&amp;gt;&amp;lt;TD&amp;gt;list&amp;lt;/TD&amp;gt; &amp;lt;TD&amp;gt;tuple&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;str, unicode&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH scope=&amp;quot;row&amp;quot;&amp;gt;Number&amp;lt;/TH&amp;gt;&amp;lt;TD&amp;gt; &amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/TD&amp;gt; &amp;lt;TD&amp;gt;int, long, float&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH scope=&amp;quot;row&amp;quot;&amp;gt;Mapping&amp;lt;/TH&amp;gt;&amp;lt;TD&amp;gt;dict&amp;lt;/TD&amp;gt; &amp;lt;TD&amp;gt; &amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH scope=&amp;quot;row&amp;quot;&amp;gt;Other&amp;lt;/TH&amp;gt;&amp;lt;TD&amp;gt;object&amp;lt;/TD&amp;gt; &amp;lt;TD&amp;gt; &amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TBODY&amp;gt;&lt;br /&gt;
&amp;lt;CAPTION&amp;gt;The basic Python types and their mutability&amp;lt;/CAPTION&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Basic type examples&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;PRE class=&amp;quot;interactive&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;gt; i=1 # an int&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; j=2**64-1 # a long integer&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; print j&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;18446744073709551615&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; f=3.14 # float (C double)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; c=1-1j # complex (1j is imaginary)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; print c&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;(1-1j)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; s=&amp;quot;welcome to python!&amp;quot;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; s.capitalize().split() # returns a list&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;[&amp;#039;Welcome&amp;#039;, &amp;#039;to&amp;#039;, &amp;#039;python!&amp;#039;]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; [ word.capitalize() for word in s.split() ]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;[&amp;#039;Welcome&amp;#039;, &amp;#039;To&amp;#039;, &amp;#039;Python!&amp;#039;]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; a, b = 1, 2&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; print (a,b) # a tuple&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;(1, 2)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; a, b = b, a&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; print (a,b)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;(2, 1)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Strings&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;PRE class=&amp;quot;interactive&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;Normal string literal isn&amp;#039;t very interesting.&amp;quot;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;quot;Normal string literal isn&amp;#039;t very interesting.&amp;quot;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;#039;Single quotes work &amp;quot;same as double&amp;quot;.&amp;#039;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;#039;Single quotes work &amp;quot;same as double&amp;quot;.&amp;#039;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;&amp;quot;&amp;quot;Triple-quoted strings are good for long strings&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;... which span multiple lines.&amp;quot;&amp;quot;&amp;quot;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;#039;Triple-quoted strings are good for long strings\nwhich span multiple lines.&amp;#039;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; r&amp;quot;Raw strings are useful for regexs, i.e. \w+ or \1&amp;quot;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;#039;Raw strings are useful for regexs, i.e. \\w+ or \\1&amp;#039;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; u&amp;quot;Unicode strings work just like regular strings.&amp;quot;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;u&amp;#039;Unicode strings work just like regular strings.&amp;#039;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; u&amp;quot;\u72c2\n\u7009&amp;quot;.encode(&amp;#039;utf-8&amp;#039;)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;#039;\xe7\x8b\x82\n\xe7\x80\x89&amp;#039;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; print u&amp;quot;\u72c2\n\u7009&amp;quot;.encode(&amp;#039;utf-8&amp;#039;)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;¿&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;¿&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Strings&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Lots of string methods and operators:&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;PRE class=&amp;quot;interactive&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;Split words into a list.&amp;quot;.split()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;[&amp;#039;Split&amp;#039;, &amp;#039;words&amp;#039;, &amp;#039;into&amp;#039;, &amp;#039;a&amp;#039;, &amp;#039;list.&amp;#039;]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;#039; &amp;#039;.join([&amp;#039;Join&amp;#039;, &amp;#039;a&amp;#039;, &amp;#039;list&amp;#039;, &amp;#039;of&amp;#039;, &amp;#039;strings&amp;#039;])&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;#039;Join a list of strings&amp;#039;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;Concatenate&amp;quot; + &amp;quot; &amp;quot; + &amp;quot;strings&amp;quot;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;#039;Concatenate strings&amp;#039;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;Multiplicity! &amp;quot; * 3&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;#039;Multiplicity! Multiplicity! Multiplicity! &amp;#039;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;Parameter %s&amp;quot; % &amp;quot;substitution&amp;quot;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;#039;Parameter substitution&amp;#039;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; d = dict(first_name=&amp;quot;Vee&amp;quot;, last_name=&amp;quot;McMillen&amp;quot;,&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;... company=&amp;quot;O&amp;#039;Reilly&amp;quot;)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;quot;Hello, %(first_name)s. How are things at %(company)s?&amp;quot; % d&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;quot;Hello, Vee. How are things at O&amp;#039;Reilly?&amp;quot;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Dictionaries&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Python dictionaries are like perl hashes:&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;PRE class=&amp;quot;interactive&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;gt; d1={}&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; d1[&amp;#039;a&amp;#039;]=1&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; d1[&amp;#039;b&amp;#039;]=2&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; d1[&amp;#039;c&amp;#039;]=3&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; d1&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;{&amp;#039;a&amp;#039;: 1, &amp;#039;c&amp;#039;: 3, &amp;#039;b&amp;#039;: 2}&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; d2={&amp;#039;a&amp;#039;: 1, &amp;#039;c&amp;#039;: 3, &amp;#039;b&amp;#039;: 2}&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; d3=dict([(&amp;#039;a&amp;#039;,1),(&amp;#039;b&amp;#039;,2),(&amp;#039;c&amp;#039;,3)])&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; d4=dict(a=1, b=2, c=3)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; d1 == d2 == d3 == d4&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;True&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; len(d1)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;3&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Values can be any type, but keys must be immutable.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Sequences&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;PRE class=&amp;quot;interactive&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;gt; l = [&amp;#039;a&amp;#039;,&amp;#039;b&amp;#039;,&amp;#039;c&amp;#039;,&amp;#039;d&amp;#039;,&amp;#039;e&amp;#039;]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; print l[0]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;a&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; print l[-1]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;e&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; print l[2:4]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;[&amp;#039;c&amp;#039;, &amp;#039;d&amp;#039;]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; s=&amp;#039;abcde&amp;#039;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; print s[2:4]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;cd&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; print s[::2]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;ace&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; print s[::-1]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;edcba&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; l.append(s)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; print l&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;[&amp;#039;a&amp;#039;, &amp;#039;b&amp;#039;, &amp;#039;c&amp;#039;, &amp;#039;d&amp;#039;, &amp;#039;e&amp;#039;, &amp;#039;abcde&amp;#039;]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Iterators&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;CODE&amp;gt;iter(object)&amp;lt;/CODE&amp;gt; returns an iterator object&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;CODE&amp;gt;iterobj.next()&amp;lt;/CODE&amp;gt; returns the next object&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;CODE&amp;gt;StopIteration&amp;lt;/CODE&amp;gt; is raised when there are no more objects&lt;br /&gt;
&amp;lt;PRE class=&amp;quot;interactive&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;gt; # no normal person would do this&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; l = [1, 2, 3]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; i = iter(l)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; i.next()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;1&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; i.next()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;2&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; i.next()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;3&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; i.next()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;Traceback (most recent call last):&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;  File &amp;quot;&amp;lt;STDIN&amp;gt;&amp;quot;, line 1, in ?&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;StopIteration&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/STDIN&amp;gt;&amp;lt;/PRE&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Common iterator usage&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;PRE class=&amp;quot;interactive&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;gt; l = [1, 2, 3]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; for item in l:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;...     print item&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;...&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;1&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;2&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;3&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; d = dict(a=1, b=2, c=3)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;gt;&amp;gt;&amp;gt; for key in d:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;...     print key, d[key]&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;...&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;a 1&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c 3&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;b 2&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Exceptions&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;PRE&amp;gt;f = open(&amp;quot;myfile&amp;quot;, &amp;#039;r&amp;#039;)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;try:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    try:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        for line in f:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;            try:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;                process(line)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;            except TypeError:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;                line = mangle(line)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;                try:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;                    process(line)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;                except TypeError:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;                    raise FoobarError, line&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    except IOError, message:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        print &amp;quot;Error reading:&amp;quot;, message&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    except FoobarError:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        print &amp;quot;This file is totally munged.&amp;quot;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    except:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        print &amp;quot;Something inexplicable happened:&amp;quot;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        raise # re-raise original exception&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;finally:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    f.close()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Odds and ends&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Code blocks are delimited by indentation&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;You probably do this already&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Space or tabs, your call; just be consistent&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;No need for curly braces&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Less cluttered, easier to read&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;End-of-line is a statement separator (so is &amp;lt;CODE&amp;gt;;&amp;lt;/CODE&amp;gt;)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;No type enforcement&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Argument types are not checked&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Function return types are not checked&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Type checking makes your code less flexible&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;If you still want it, you can add it cleanly with decorators&amp;lt;/LI&amp;gt;&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;Operator overloading for user-defined classes&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;I&amp;gt;Everything&amp;lt;/I&amp;gt; is a reference (pass by reference)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;CODE&amp;gt;None&amp;lt;/CODE&amp;gt; object for null/missing values (equivalent to &amp;lt;CODE&amp;gt;NULL&amp;lt;/CODE&amp;gt;)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Odds and ends&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Member access with &amp;lt;CODE&amp;gt;.&amp;lt;/CODE&amp;gt; operator&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;CODE&amp;gt;instance.method()&amp;lt;/CODE&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;CODE&amp;gt;instance.attribute&amp;lt;/CODE&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;CODE&amp;gt;instance.attribute.another&amp;lt;/CODE&amp;gt;&amp;lt;/LI&amp;gt;&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;Functions/methods are not the only things that are callable&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Decorators apply a callable to a function at creation time:&amp;lt;PRE&amp;gt;@g&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;def f(x):&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    ...&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt; is equivalent to:&amp;lt;PRE&amp;gt;def f(x):&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    ...&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;f = g(f)&amp;lt;/PRE&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;The Python DB-API&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Standard API for database access&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;PEP 249: &amp;lt;A href=&amp;quot;http://www.python.org/peps/pep-0249.html&amp;quot; title=&amp;quot;PEP 249: Python Database API v2.0&amp;quot;&amp;gt;http://www.python.org/peps/pep-0249.html&amp;lt;/A&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;By convention, module name ends with &amp;quot;db&amp;quot;, i.e. MySQLdb&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Module Interface&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Connection Objects&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Cursor Objects&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;DBI Helper Objects&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Type Objects and Constructors&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Implementation Hints&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Major Changes from 1.0 to 2.0&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Module Interface&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;DL&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;connect(...)&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Constructor for creating a connection to the database.&lt;br /&gt;
            Returns a Connection Object.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;apilevel&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;String constant stating the supported DB API level.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;threadsafety&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt; Integer constant stating the level of thread safety the&lt;br /&gt;
interface supports.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;/DL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;SQL parameter placeholders&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;paramstyle&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;String constant stating the type of parameter marker formatting expected by the interface.&lt;br /&gt;
&amp;lt;DL&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;&amp;#039;qmark&amp;#039;&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Question mark style, e.g. &amp;#039;...WHERE name=?&amp;#039;&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;&amp;#039;numeric&amp;#039;&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Numeric, positional style, e.g. &amp;#039;...WHERE name=:1&amp;#039;&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;&amp;#039;named&amp;#039;&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Named style, e.g. &amp;#039;...WHERE name=:name&amp;#039;&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;&amp;#039;format&amp;#039;&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;ANSI C printf format codes, e.g. &amp;#039;...WHERE name=%s&amp;#039;&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;&amp;#039;pyformat&amp;#039;&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Python extended format codes, e.g. &amp;#039;...WHERE name=%(name)s&amp;#039;&amp;lt;/DD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MySQLdb 1.0 and 1.2 uses format and pyformat; 2.0 may also support qmark.&lt;br /&gt;
&amp;lt;/DL&amp;gt;&lt;br /&gt;
&amp;lt;/DD&amp;gt;&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Exceptions&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;StandardError&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Warning&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Error&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;InterfaceError&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;DatabaseError&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;DataError&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;OperationalError&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;IntegrityError&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;InternalError&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;ProgrammingError&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;NotSupportedError&amp;lt;/LI&amp;gt;&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/LI&amp;gt;&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Connection Object&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;DL&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.close()&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Close the connection now&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.commit()&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Commit any pending transaction to the database. Auto-commit off by default.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.rollback()&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Rollback any pending transaction.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.cursor()&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Return a new Cursor Object using the connection.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;&amp;lt;I&amp;gt;exceptions&amp;lt;/I&amp;gt;&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;The standard exception classes; simplfies error handling in some cases&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.messages&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;list of error/warning messages since last method call&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;/DL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Cursor Object&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;DL&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.description&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;A sequence of sequences, each of which describe a column of the result.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.rowcount&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Number of rows affected by last query.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.callproc(procname[,parameters])&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Call a stored database procedure with the given name.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.close()&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Close the cursor now.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.execute(operation[,parameters])&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Prepare and execute a database operation (query or&lt;br /&gt;
command).  Parameters: sequence or mapping.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.executemany(operation,seq_of_parameters)&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Prepare a database operation (query or command) and then&lt;br /&gt;
execute it against a sequence of parameters.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;/DL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Cursor Object&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;DL&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.fetchone()&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Fetch the next row of the result set&lt;br /&gt;
as a sequence, or &amp;lt;I&amp;gt;None&amp;lt;/I&amp;gt; if there are no more rows.&lt;br /&gt;
&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.fetchmany(&amp;lt;I&amp;gt;[size=cursor.arraysize]&amp;lt;/I&amp;gt;)&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Fetch a sequence of up to &amp;lt;I&amp;gt;size&amp;lt;/I&amp;gt; rows;&lt;br /&gt;
may be fewer. Zero length sequence indicates end of result set.&lt;br /&gt;
&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.fetchall()&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Fetch all remaining rows as a sequence of rows.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.nextset()&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Skip to the next result set. Returns a true value if there is another&lt;br /&gt;
result set; &amp;lt;I&amp;gt;None&amp;lt;/I&amp;gt; (false) if not.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.arraysize&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Default number of rows to return with cursor.fetchmany().&lt;br /&gt;
Default: 1.&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;/DL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Cursor Object&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;DL&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.rownumber&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Current index into result set&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.connection&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;The Connection object for this cursor&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.scroll(value&amp;lt;I&amp;gt;[,mode=&amp;#039;relative&amp;#039;]&amp;lt;/I&amp;gt;)&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Scroll to a new position in the result set (relative or absolute).&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.messages&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;List containing warning/error messages since last method call&lt;br /&gt;
(except the .fetch&amp;lt;I&amp;gt;XXX&amp;lt;/I&amp;gt;() methods).&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.next()&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Fetches one row (like fetchone()) or raises &amp;lt;CODE&amp;gt;StopIteration&amp;lt;/CODE&amp;gt;&lt;br /&gt;
if no rows left. &amp;lt;I&amp;gt;Iterator protocol&amp;lt;/I&amp;gt;&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;DT&amp;gt;.lastrowid&amp;lt;/DT&amp;gt;&lt;br /&gt;
&amp;lt;DD&amp;gt;Row id of the last affected row (i.e. inserting &amp;lt;CODE&amp;gt;AUTO_INCREMENT&amp;lt;/CODE&amp;gt;&lt;br /&gt;
columns)&amp;lt;/DD&amp;gt;&lt;br /&gt;
&amp;lt;/DL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;MySQL for Python&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;MySQL-python project on SourceForge:&lt;br /&gt;
&amp;lt;A href=&amp;quot;http://sourceforge.net/projects/mysql-python&amp;quot; title=&amp;quot;MySQL-python project on SourceForge&amp;quot;&amp;gt;http://sourceforge.net/projects/mysql-python&amp;lt;/A&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Current best version: 1.2.0&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Python-2.3 and newer (and maybe 2.2)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;MySQL-3.23, 4.0, and 4.1 (and maybe 5.0)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Prepared statements not supported yet&amp;lt;/LI&amp;gt;&amp;lt;/UL&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Older version: 1.0.1&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Python-1.5.2 (very old) and newer&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;MySQL-3.22, 3.23, and 4.0 (not 4.1 or newer)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Don&amp;#039;t use if you can use 1.2.0&amp;lt;/LI&amp;gt;&amp;lt;/UL&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Vaporware version: 2.0&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Python-2.4 and newer&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;MySQL-4.0, 4.1, and 5.0&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Prepared statements will be supported&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Return all text columns as &amp;lt;CODE&amp;gt;unicode&amp;lt;/CODE&amp;gt; by default&amp;lt;/LI&amp;gt;&amp;lt;/UL&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Architecture&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;twocol&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;&amp;lt;CODE&amp;gt;_mysql&amp;lt;/CODE&amp;gt;&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;C extension module&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;transliteration of MySQL C API into Python objects&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;If you use the C API, this should be very familiar&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Deprecated API calls not implemented&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Not everything (particularly fields) is exposed&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;SQL column type to Python type conversions handled by&lt;br /&gt;
a dictionary&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;twocol&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;&amp;lt;CODE&amp;gt;MySQLdb&amp;lt;/CODE&amp;gt;&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Adapts &amp;lt;CODE&amp;gt;_mysql&amp;lt;/CODE&amp;gt; to DB-API&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Many non-standard C API calls are exposed&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Relatively light-weight wrapper&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Implements cursors&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Defines default type mappings; easily&lt;br /&gt;
customizable&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Opening a connection&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;CODE&amp;gt;connect()&amp;lt;/CODE&amp;gt; takes the same options as &amp;lt;CODE&amp;gt;mysql_real_connect()&amp;lt;/CODE&amp;gt;, and then some.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;PRE&amp;gt;import MySQLdb&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;# These are all equivalent, for the most part&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;db = MySQLdb.connect(&amp;quot;myhost&amp;quot;, &amp;quot;myuser&amp;quot;, &amp;quot;mysecret&amp;quot;, &amp;quot;mydb&amp;quot;)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;db = MySQLdb.connect(host=&amp;quot;myhost&amp;quot;, user=&amp;quot;myuser&amp;quot;,&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;                     passwd=&amp;quot;mysecret&amp;quot;, db=&amp;quot;mydb&amp;quot;)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;auth = dict(user=&amp;quot;myuser&amp;quot;, passwd=&amp;quot;mysecret&amp;quot;)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;db = MySQLdb.connect(&amp;quot;myhost&amp;quot;, db=&amp;quot;mydb&amp;quot;, **auth)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;db = MySQLdb.connect(read_default_file=&amp;quot;/etc/mysql/myapp.cnf&amp;quot;)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;CODE&amp;gt;compress=1&amp;lt;/CODE&amp;gt; enables gzip compression&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;CODE&amp;gt;use_unicode=1&amp;lt;/CODE&amp;gt; returns text-like columns as &amp;lt;CODE&amp;gt;unicode&amp;lt;/CODE&amp;gt; objects&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;CODE&amp;gt;ssl=dict(...)&amp;lt;/CODE&amp;gt; negotiates SSL/TLS&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Simple query example&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;PRE&amp;gt;import MySQLdb&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;db = MySQLdb.connect(read_default_file=&amp;quot;/etc/mysql/myapp.cnf&amp;quot;)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c = db.cursor()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c.execute(&amp;quot;&amp;quot;&amp;quot;SELECT * FROM users WHERE userid=%s&amp;quot;&amp;quot;&amp;quot;, (&amp;#039;monty&amp;#039;,))&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;print c.fetchone()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;Notes&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;CODE&amp;gt;(&amp;#039;monty&amp;#039;,)&amp;lt;/CODE&amp;gt; is a 1-tuple; comma required to distinquish&lt;br /&gt;
from algebraic grouping&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Good reasons not to use &amp;lt;CODE&amp;gt;*&amp;lt;/CODE&amp;gt;&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;How many columns are being returned?&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;What is the order of the columns?&amp;lt;/LI&amp;gt;&amp;lt;/UL&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Good reasons to use &amp;lt;CODE&amp;gt;*&amp;lt;/CODE&amp;gt;&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Table/database browser&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Lazy&amp;lt;/LI&amp;gt;&amp;lt;/UL&amp;gt;&amp;lt;/LI&amp;gt;&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Multi-row query example&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;PRE&amp;gt;c = db.cursor()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c.execute(&amp;quot;&amp;quot;&amp;quot;SELECT userid, first_name, last_name, company&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;FROM users WHERE status=%s and expire&amp;gt;%s&amp;quot;&amp;quot;&amp;quot;,&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;(status, today))&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;users = c.fetchall()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;Notes&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;We know what the columns are&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Could use some object abstraction&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;A simple User class&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;PRE&amp;gt;class User(object):&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    &amp;quot;&amp;quot;&amp;quot;A simple User class&amp;quot;&amp;quot;&amp;quot;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    def __init__(self, userid,&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;                 first_name=None, last_name=None,&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;                 company=None):&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        self.userid = userid&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        self.first_name = first_name&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        self.last_name = last_name&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        self.company = company&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    def announce(self):&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        &amp;quot;&amp;quot;&amp;quot;Announce User to the world.&amp;quot;&amp;quot;&amp;quot;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        name = &amp;quot;%s %s&amp;quot; % (self.first_name, self.last_name)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        if self.company:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;            return &amp;quot;%s of %s&amp;quot; % (name, self.company)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        else:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;            return name&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    def __str__(self):&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;        return self.announce()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Multi-row query with User object&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;PRE&amp;gt;users = []&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c = db.cursor()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c.execute(&amp;quot;&amp;quot;&amp;quot;SELECT userid, first_name, last_name, company&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;FROM users WHERE status=%s and expire&amp;gt;%s&amp;quot;&amp;quot;&amp;quot;,&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;(status, today))&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;for userid, first_name, last_name, company in c.fetchall():&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    u = User(userid, first_name, last_name, company)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    print u&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    users.append(u)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;might produce output like:&lt;br /&gt;
&amp;lt;/P&amp;gt;&amp;lt;PRE&amp;gt;Tim O&amp;#039;Reilly of O&amp;#039;Reilly Media, Inc.&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;Monty Widenius of MySQL AB&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;Carleton Fiorina&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;Guido van Rossum of Elemental Security&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Cursors are iterators&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Not necessary to use &amp;lt;CODE&amp;gt;c.fetchall()&amp;lt;/CODE&amp;gt;&lt;br /&gt;
&amp;lt;/P&amp;gt;&amp;lt;PRE&amp;gt;users = []&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c = db.cursor()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c.execute(&amp;quot;&amp;quot;&amp;quot;SELECT userid, first_name, last_name, company&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;FROM users WHERE status=%s and expire&amp;gt;%s&amp;quot;&amp;quot;&amp;quot;,&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;(status, today))&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;for userid, first_name, last_name, company in c:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    u = User(userid, first_name, last_name, company)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    print u&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    users.append(u)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Under certain conditions, this is more efficient&lt;br /&gt;
than &amp;lt;CODE&amp;gt;fetchall()&amp;lt;/CODE&amp;gt;, and no worse.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Dictionaries as parameters&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Python classes typically store attributes in &amp;lt;CODE&amp;gt;__dict__&amp;lt;/CODE&amp;gt;,&lt;br /&gt;
so you can get away with this:&lt;br /&gt;
&amp;lt;/P&amp;gt;&amp;lt;PRE&amp;gt;u = User(...)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c = db.cursor()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c.execute(&amp;quot;&amp;quot;&amp;quot;INSERT INTO users&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;(userid, first_name, last_name, company)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;VALUES (%(userid)s, %(first_name)s,&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;%(last_name)s, %(company)s)&amp;quot;&amp;quot;&amp;quot;, u.__dict__)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;db.commit()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Multi-row INSERT&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;PRE&amp;gt;# users is a list of (userid, first_name, last_name, company)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c = db.cursor()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c.executemany(&amp;quot;&amp;quot;&amp;quot;INSERT INTO users&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;(userid, first_name, last_name, company)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;VALUES (%s, %s, %s, %s)&amp;quot;&amp;quot;&amp;quot;, users)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;db.commit()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;In MySQLdb, this is converted internally to a multi-row INSERT,&lt;br /&gt;
which is reported to be 2-3 orders of magnitude faster.&lt;br /&gt;
Also works for REPLACE.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Multi-row INSERT with dictionaries&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;PRE&amp;gt;# users is a list of Users&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c = db.cursor()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c.executemany(&amp;quot;&amp;quot;&amp;quot;INSERT INTO users&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;(userid, first_name, last_name, company)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;VALUES (%(userid)s, %(first_name)s,&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;%(last_names, %(company)s)&amp;quot;&amp;quot;&amp;quot;,&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;[ u.__dict__ for u in users ])&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;db.commit()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;This builds the parameter list with a list comprehension.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Never do this&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;Biggest MySQLdb newbie mistake of all time:&lt;br /&gt;
Seeing &amp;lt;CODE&amp;gt;%s&amp;lt;/CODE&amp;gt; and thinking, &amp;quot;I should use the &amp;lt;CODE&amp;gt;%&amp;lt;/CODE&amp;gt;&lt;br /&gt;
operator here.&amp;quot;&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;PRE&amp;gt;users = []&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c = db.cursor()&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c.execute(&amp;quot;&amp;quot;&amp;quot;SELECT userid, first_name, last_name, company&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;FROM users WHERE status=&amp;#039;%s&amp;#039; and expire&amp;gt;&amp;#039;%s&amp;#039;&amp;quot;&amp;quot;&amp;quot; %&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;(status, today))&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;for userid, first_name, last_name, company in c:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    u = User(userid, first_name, last_name, company)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    print u&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    users.append(u)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Note use of &amp;lt;CODE&amp;gt;%&amp;lt;/CODE&amp;gt; operator to insert parameter values.&lt;br /&gt;
This does &amp;lt;B&amp;gt;not&amp;lt;/B&amp;gt; provide proper quoting (escaping of&lt;br /&gt;
&amp;lt;CODE&amp;gt;&amp;#039;&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;NULL&amp;lt;/CODE&amp;gt;/&amp;lt;CODE&amp;gt;None&amp;lt;/CODE&amp;gt;, or &amp;lt;CODE&amp;gt;\0&amp;lt;/CODE&amp;gt;).&lt;br /&gt;
Passing them separately (as the second parameter)&lt;br /&gt;
ensures they are quoted correctly. However, &amp;lt;CODE&amp;gt;%&amp;lt;/CODE&amp;gt;&lt;br /&gt;
&amp;lt;B&amp;gt;is&amp;lt;/B&amp;gt; necessary if you have to insert arbitrary SQL&lt;br /&gt;
such as column or table names or &amp;lt;CODE&amp;gt;WHERE&amp;lt;/CODE&amp;gt; clauses.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;To buffer, or not to buffer...&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;twocol&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;&amp;lt;CODE&amp;gt;mysql_store_result()&amp;lt;/CODE&amp;gt;&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Stores all rows of result set in client&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Large result sets can chew up a lot of memory&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Size of result set known immediately&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Result set is seekable&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Can issue another query immediately&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Used for standard MySQLdb cursor&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;twocol&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;&amp;lt;CODE&amp;gt;mysql_use_result()&amp;lt;/CODE&amp;gt;&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Sends result set row by row&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Consumes resources on server&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Must fetch all rows before issuing any other queries&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Size of result set unknown until finished&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Not seekable&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Can be used with MySQLdb&amp;#039;s &amp;lt;CODE&amp;gt;SSCursor&amp;lt;/CODE&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Optional cursor classes&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;CODE&amp;gt;DictCursor&amp;lt;/CODE&amp;gt; causes &amp;lt;CODE&amp;gt;fetchXXX()&amp;lt;/CODE&amp;gt; methods&lt;br /&gt;
to return mappings instead of sequences, with column names for&lt;br /&gt;
keys.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;PRE&amp;gt;users = []&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c = db.cursor(MySQLdb.cursors.DictCursor)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;c.execute(&amp;quot;&amp;quot;&amp;quot;SELECT userid, first_name, last_name, company&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;FROM users WHERE status=%s and expire&amp;gt;%s&amp;quot;&amp;quot;&amp;quot;,&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;(status, today))&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;for row in c:&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    u = User(**row)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    print u&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;    users.append(u)&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Note that column names happen to match &amp;lt;CODE&amp;gt;User&amp;lt;/CODE&amp;gt; member names&lt;br /&gt;
in this case.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Type objects and constructors&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Constructors&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Date(year,month,day)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Time(hour,minute,second)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;DateFromTicks(ticks)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;TimeFromTicks(ticks)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;TimestampFromTicks(ticks)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Binary(string)&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;Types&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;STRING&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;BINARY&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;NUMBER&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;DATETIME&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;ROWID&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/LI&amp;gt;&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;These are not often used with MySQLdb.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Embedded server&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Build with embedded server support:&lt;br /&gt;
&amp;lt;PRE&amp;gt;$ export mysqlclient=mysqld&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;$ python setup.py build&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;# python setup.py install&amp;lt;BR&amp;gt;&amp;lt;/BR&amp;gt;&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;&amp;lt;CODE&amp;gt;_mysql.server_start()&amp;lt;/CODE&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Use normally&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;&amp;lt;CODE&amp;gt;_mysql.server_end()&amp;lt;/CODE&amp;gt;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV class=&amp;quot;slide&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Questions?&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;http://sourceforge.net/projects/mysql-python&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;http://www.terry.uga.edu/&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;http://www.uga.edu/&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/DIV&amp;gt;&amp;lt;DIV class=&amp;quot;wikisrc&amp;quot;&amp;gt;&amp;lt;/DIV&amp;gt;&amp;lt;DIV class=&amp;quot;wikisrc&amp;quot;&amp;gt;&amp;lt;/DIV&amp;gt;&amp;lt;DIV class=&amp;quot;wikisrc&amp;quot;&amp;gt;{html}&amp;lt;/DIV&amp;gt;&amp;lt;/DIV&amp;gt;&amp;lt;/DIV&amp;gt;&amp;lt;P&amp;gt;&amp;lt;/P&amp;gt;&amp;lt;P&amp;gt;&amp;lt;/P&amp;gt;&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
</feed>