{"id":44767,"date":"2019-04-23T03:01:45","date_gmt":"2019-04-22T17:01:45","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=44767"},"modified":"2024-09-08T16:56:35","modified_gmt":"2024-09-08T06:56:35","slug":"python-mysql-connector-blob-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/python-mysql-connector-blob-tutorial\/","title":{"rendered":"Python MySql Connector Blob Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/MySql\/mysql_python_testdb_blob.jpg\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;float:left;\" alt=\"Python MySql Connector Blob Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/MySql\/mysql_python_testdb_blob.jpg\" title=\"Python MySql Connector Blob Tutorial\"  \/><\/a><p class=\"wp-caption-text\">Python MySql Connector Blob Tutorial<\/p><\/div>\n<blockquote><p>\nNo, <a target=\"_blank\" title='Nala' href='http:\/\/www.rjmprogramming.com.au\/Mac\/PhotoBooth_flickr.jpg' rel=\"noopener\">Nala<\/a>, we can&#8217;t see <a target=\"_blank\" title='?' href='https:\/\/www.youtube.com\/watch?v=TdUsyXQ8Wrs' rel=\"noopener\">The Blob<\/a> for the 743rd time today.  But we can discuss &#8220;blob&#8221; in terms of MySql database file storage.  It&#8217;s that, or a bath?!  Okay, that&#8217;s settled, so make yourself comfortable with your favourite bone while we slither through our &#8220;Python MySql Connector Blob Tutorial&#8221;\n<\/p><\/blockquote>\n<p>In the past we&#8217;d talked about Python and MySql connections on a MacBook Pro under Mac OS X with <a title='Python MySql Connector Primer Tutorial' href='#pmscpt'>Python MySql Connector Primer Tutorial<\/a>.  Today, we&#8217;re reacquainting and updating the knowledge, and here, at macOS Mojave Version 10.14, on this MacBook Pro we got a great heads up <a target=\"_blank\" title='Great help, thanks' href='https:\/\/stackoverflow.com\/questions\/53691530\/how-to-retrieve-file-stored-as-blob-in-mysqldb-using-python' rel=\"noopener\">from this great link<\/a>, thanks, about writing an INSERT\/UPDATE\/SELECT style application to download a Python command line application to store and update and retrieve binary files, such as image files, into and out of a MySql database table, in our case a <a target=\"_blank\" title='MAMP' href='http:\/\/mamp.info' rel=\"noopener\">MAMP<\/a> local Apache\/PHP\/MySql web server one that uses port 8889 and a \/Applications\/MAMP\/tmp\/mysql\/mysql.sock socket file (thanks for the connection advice, <a target=\"_blank\" title='Great help, thanks' href='https:\/\/stackoverflow.com\/questions\/26105726\/how-do-i-use-mysql-connector-python-with-mamp' rel=\"noopener\">you guessed it, Stackoverflow<\/a>) via the <a target=\"_blank\" title='Great link, thanks' href='https:\/\/stackoverflow.com\/questions\/24272223\/import-mysql-connector-python' rel=\"noopener\">reinstall<\/a><\/p>\n<p><code><br \/>\nsudo pip install mysql-connector<br \/>\n<\/code><\/p>\n<p> &#8230; that you need should you first get the error &#8230;<\/p>\n<p><code><br \/>\nImportError: No module named mysql.connector<br \/>\n<\/code><\/p>\n<p> &#8230; on revving the engines of macOS Mojave Terminal application command line (and we&#8217;re assuming you have Python installed here, otherwise &#8220;pip&#8221; makes no sense, <a target=\"_blank\" title='?' href='https:\/\/www.google.com\/search?q=great+expectations&#038;rlz=1C5CHFA_enAU832AU832&#038;oq=great+expectations&#038;aqs=chrome..69i57j0l5.8153j0j9&#038;sourceid=chrome&#038;ie=UTF-8' rel=\"noopener\">unless<\/a>) via &#8230;<\/p>\n<p><code><br \/>\n<a target=\"_blank\" title='Python on macOS' href='https:\/\/www.python.org\/downloads\/mac-osx\/' rel=\"noopener\">python<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/MySql\/readblob.py_GETME\" title=\"readblob.py\" rel=\"noopener\">readblob.py<\/a><br \/>\n<\/code><\/p>\n<p>Now this code just shows the use of a MySql table already primed, rather than the Python application priming it.  What steps did we take to &#8220;prime&#8221; the MAMP MySql database &#8220;testdb&#8221; that we coded for &#8230;<\/p>\n<ol>\n<li>started up MAMP<\/li>\n<li>clicked its &#8220;Open WebStart Page&#8221; button (to a Safari web browser webpage)<\/li>\n<li>clicked the link to (great, brilliant, marvellous) phpMyAdmin<\/li>\n<li>create &#8220;testdb&#8221; database, as required, via (click of) &#8220;SQL&#8221; button &#8230;<br \/>\n<code><br \/>\ncreate database testdb<br \/>\n<\/code><br \/>\n &#8230; Go button(click) scenario<\/li>\n<li>be in &#8220;testdb&#8221; database via click of its link down the left hand side<\/li>\n<li>create `IMAGES` table via (click of) &#8220;SQL&#8221; button &#8230;<br \/>\n<code><br \/>\nCREATE TABLE `IMAGES` (<br \/>\n  `id` int(11) NOT NULL,<br \/>\n  `photo` <a target=\"_blank\" title='MySql blob info' href='https:\/\/dev.mysql.com\/doc\/en\/blob.html' rel=\"noopener\">longblob<\/a> NOT NULL<br \/>\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;<br \/>\n<\/code><br \/>\n &#8230; Go button (click) scenario<\/li>\n<\/ol>\n<p>The Python code (just &#8220;def main&#8221; detail and MySql connection code tweak changed <a target=\"_blank\" title='Great help, thanks' href='https:\/\/stackoverflow.com\/questions\/53691530\/how-to-retrieve-file-stored-as-blob-in-mysqldb-using-python' rel=\"noopener\">from this great link<\/a>, thanks) at startup here makes a connection to a MAMP (running) MySql database via &#8230;<\/p>\n<p><code><br \/>\nfrom mysql.connector import MySQLConnection, Error,connect<br \/>\n<br \/>\ndb_username='root'<br \/>\ndb_password='root'<br \/>\ndatabase_name='testdb'<br \/>\ndb_host='127.0.0.1'<br \/>\n<br \/>\ndef main():<br \/>\n    write_blob(1,\"whyno.jpg\")<br \/>\n    update_blob(1, \"svg_map.jpg\")<br \/>\n    read_blob(1,\"02.jpg\")<br \/>\n<br \/>\nif __name__ == '__main__':<br \/>\n    main()<br \/>\n<\/code><\/p>\n<p> &#8230; respectively &#8230;<\/p>\n<p><code><br \/>\ndef read_file(filename):<br \/>\n    with open(filename, 'rb') as f:<br \/>\n        photo = f.read()<br \/>\n    return photo<br \/>\n<br \/>\ndef write_blob(author_id, filename):<br \/>\n    # read file<br \/>\n    data = read_file(filename)<br \/>\n    # prepare update query and data<br \/>\n    query = \"INSERT INTO `images` (`id`,`photo`) VALUES (%s,%s)\"<br \/>\n    args = (author_id,data)<br \/>\n    try:<br \/>\n        cnx = MySQLConnection(user=db_username, password=db_password, host=db_host, port='8889',  \\<br \/>\n unix_socket='\/Applications\/MAMP\/tmp\/mysql\/mysql.sock', database=database_name)<br \/>\n        cursor = cnx.cursor()<br \/>\n        cursor.execute(query, args)<br \/>\n        cnx.commit()<br \/>\n    except Exception as e:<br \/>\n        print(e)<br \/>\n    finally:<br \/>\n        cursor.close()<br \/>\n        cnx.close()<br \/>\n<\/code><\/p>\n<p> &#8230; and &#8230;<\/p>\n<p><code><br \/>\ndef update_blob(author_id, filename):<br \/>\n    # read file<br \/>\n    data = read_file(filename)<br \/>\n    # prepare update query and data<br \/>\n    query = \"UPDATE images \" \\<br \/>\n            \"SET photo = %s \" \\<br \/>\n            \"WHERE id  = %s\"<br \/>\n    args = (data, author_id)<br \/>\n    try:<br \/>\n        cnx = MySQLConnection(user=db_username, password=db_password, host=db_host, port='8889',  \\<br \/>\n unix_socket='\/Applications\/MAMP\/tmp\/mysql\/mysql.sock', database=database_name)<br \/>\n        cursor = cnx.cursor()<br \/>\n        cursor.execute(query, args)<br \/>\n        cnx.commit()<br \/>\n    except Exception as e:<br \/>\n        print(e)<br \/>\n    finally:<br \/>\n        cursor.close()<br \/>\n        cnx.close()<br \/>\n<\/code><\/p>\n<p> &#8230; and &#8230;<\/p>\n<p><code><br \/>\ndef write_file(data, filename):<br \/>\n    with open(filename, 'wb') as f:<br \/>\n        f.write(data)<br \/>\n<br \/>\ndef read_blob(author_id, filename):<br \/>\n    # select photo column of a specific author<br \/>\n    query = \"SELECT photo FROM images WHERE id = %s\"<br \/>\n    try:<br \/>\n        cnx = MySQLConnection(user=db_username, password=db_password, host=db_host, port='8889',  \\<br \/>\n unix_socket='\/Applications\/MAMP\/tmp\/mysql\/mysql.sock', database=database_name)<br \/>\n        cursor = cnx.cursor()<br \/>\n        cursor.execute(query, (author_id,))<br \/>\n        photo=cursor.fetchone()[0]<br \/>\n        # write blob data into a file<br \/>\n        write_file(photo, filename)<br \/>\n    except Exception as e:<br \/>\n        print(e)<br \/>\n    finally:<br \/>\n        cursor.close()<br \/>\n        cnx.close()<br \/>\n<\/code><\/p>\n<p> &#8230; for an initial phpMyAdmin database: testdb `images` link click Browse link that showed &#8230;<\/p>\n<table>\n<tr>\n<th>id<\/th>\n<th>photo<\/th>\n<\/tr>\n<\/table>\n<p> &#8230; for us, where the folder of readblob.py had existant whyno.jpg and svg_map.jpg but no 02.jpg until &#8230;<\/p>\n<p><code><br \/>\n$ ls -l whyno.jpg svg_map.jpg 02.jpg<br \/>\nls: 02.jpg: No such file or directory<br \/>\n-rw-r--r--@ 1 user  admin  570207  7 Feb 21:18 svg_map.jpg<br \/>\n-rw-r--r--@ 1 user  admin  423196 19 Mar 19:39 whyno.jpg<br \/>\n$ python readblob.py<br \/>\n$ ls -l whyno.jpg svg_map.jpg 02.jpg<br \/>\n-rw-r--r--  1 user  admin  570207 22 Apr 13:36 02.jpg<br \/>\n-rw-r--r--@ 1 user  admin  570207  7 Feb 21:18 svg_map.jpg<br \/>\n-rw-r--r--@ 1 user  admin  423196 19 Mar 19:39 whyno.jpg<br \/>\n$<br \/>\n<\/code><\/p>\n<p> &#8230; whereby phpMyAdmin database: testdb `images` link click Browse link then showed &#8230;<\/p>\n<table>\n<tr>\n<th>id<\/th>\n<th>photo<\/th>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>[BLOB &#8211; 556.8 KiB]<\/td>\n<\/tr>\n<\/table>\n<p> &#8230; giving you (in addition to a glint in the eye of a <a target=\"_blank\" title='Steve McQueen' href='https:\/\/www.google.com\/search?rlz=1C5CHFA_enAU832AU832&#038;ei=Ezm9XLaIO5P-rQH_5J_AAg&#038;q=steve+mcqueen&#038;oq=steve+mcqueen&#038;gs_l=psy-ab.3..0i67j0i10j0i7i30l3j0i10l5.1301.1679..1808...0.0..0.316.316.3-1......0....1..gws-wiz.biRgshHC66A' rel=\"noopener\">Steve McQueen<\/a> up there somewhere) a blueprint for a <a target=\"_blank\" title='?' href='https:\/\/www.youtube.com\/watch?v=nV8U7oGEJLM' rel=\"noopener\">slytherin<\/a> good time hangin&#8217; out with <a target=\"_blank\" title='MAMP' href='http:\/\/www.mamp.info' rel=\"noopener\">MAMP<\/a> <font size=2>&#8230; chortle, chortle<\/font> <font size=1>&#8230; not forgetting good ol&#8217; 02.jpg<\/font> &#8230; <a target=\"_blank\" title='?' href='https:\/\/getyarn.io\/yarn-clip\/1737ecbf-d33d-4830-baf2-7db3f1f51d5b' rel=\"noopener\">good times<\/a>.<\/p>\n<hr>\n<p id='pmscpt'>Previous relevant <a target=\"_blank\" title='Python MySql Connector Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/python-mysql-connector-primer-tutorial\/' rel=\"noopener\">Python MySql Connector Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/MySql\/mysql_python_testdb.pdf\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;float:left;\" alt=\"Python MySql Connector Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/MySql\/mysql_python_testdb.jpg\" title=\"Python MySql Connector Primer Tutorial\"  \/><\/a><p class=\"wp-caption-text\">Python MySql Connector Primer Tutorial<\/p><\/div>\n<p>In the past we&#8217;ve teamed Python (server side language) up with the MySql (database) via a python module called MySQLdb when we presented <a title='Python MySql Circle and Point DataTable Primer Tutorial' href='#pmscpdtpt'>Python MySql Circle and Point DataTable Primer Tutorial<\/a> below.  Then, we shared the Mac OS X MAMP local web server&#8217;s MySql instance (teamed with Apache and PHP (server side language)) to perform some SQL (of the MySql ilk) regarding the storage of some Circle and Point database tables and data.<\/p>\n<p>Moving on today, we are acting as though MAMP was never installed <font size=1>&#8230; what blasphemy! &#8230;<\/font> because, in all likelihood, that is likely to be the case if Python has been chosen as your primary serverside language, rather than PHP <font size=1>&#8230; what gall?! &#8230;<\/font><\/p>\n<p>So what&#8217;s the go with MySql these days?  For us, here at Mac OS X macOS 10.12.3 (on a MacBook Pro) &#8230;<\/p>\n<p><code><br \/>\nmysql  Ver 8.0.11 for macos10.13 on x86_64 (MySQL Community Server - GPL)<br \/>\n<\/code><\/p>\n<p>What port is listening for a non-MAMP MySql installation?<\/p>\n<p><code><br \/>\n3306 is default<br \/>\n<\/code><\/p>\n<p>What is the latest Python version as of today?<\/p>\n<p><code><br \/>\nPython 3.6.5<br \/>\n<\/code><\/p>\n<p> &#8230; accessed via &#8220;python3&#8221; concurrent with an older 2.7.10 version accessed via &#8220;python&#8221;, on Mac OS X (Terminal bash) command line.<\/p>\n<p>What links MySql to Python3?<\/p>\n<p><code><br \/>\nmysql-connector-python-8.0.11-macos10.13.dmg installs module mysql.connector (or called \"Connector\/Python\" at MySql webpages) via ...<br \/>\npip 10.0.1 from \/Library\/Python\/2.7\/site-packages\/pip (python 2.7) via ...<br \/>\npip install mysql-connector-python-rf<br \/>\n<\/code><\/p>\n<p>Any symlinks needed to make &#8220;command line&#8221; life easier?  Yes &#8230;<\/p>\n<p><code><br \/>\nsudo ln -s \/usr\/local\/mysql\/bin\/mysql \/usr\/local\/bin\/mysql<br \/>\nsudo ln -s \/Library\/Frameworks\/Python.framework\/Versions\/3.6\/lib\/python3.6\/site-packages\/pip \/usr\/local\/bin\/pip<br \/>\n<\/code><\/p>\n<p> &#8230; so that &#8230;<\/p>\n<p><code><br \/>\nmysql -uUserName -pPassWord<br \/>\n<\/code><\/p>\n<p> &#8230; starts a MySql (port 3306 listener) session ready for SQL DDL and DML commands.<\/p>\n<p>In summary, for a MacBook Pro initially just having the MAMP MySql (that listens on port 8889) and Python 2.7.10, we &#8230;<\/p>\n<ol>\n<li>installed (new) MySql instance version 8.0.11<\/li>\n<li>installed (new) Python <a target=\"_blank\" title=\"python\" href='https:\/\/www.python.org\/downloads\/mac-osx\/' rel=\"noopener\">version 3.6.5<\/a> accessed via &#8220;python3&#8221;<\/li>\n<li>installed pip 10.0.1 (via downloading get-pip.py then &#8220;python get-pip.py&#8221;)<\/li>\n<li>installed (Python module) mysql.connector via &#8220;pip install mysql-connector-python-rf&#8221;<\/li>\n<\/ol>\n<p> &#8230; environmentally, then (got <a target=\"_blank\" title='great help' href='https:\/\/dev.mysql.com\/doc\/connector-python\/en\/connector-python-example-connecting.html' rel=\"noopener\">great help<\/a>) writing Python <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/\/MySql\/mysqlpy.py_GETME\" rel=\"noopener\">mysqlpy.py<\/a> to test MySql database via Python connection code.<\/p>\n<p>Then we (got more <a target=\"_blank\" title='great help' href='https:\/\/dev.mysql.com\/doc\/connector-python\/en\/connector-python-example-ddl.html' rel=\"noopener\">great help<\/a> and) pieced together  Python <a target=\"_blank\" title=\"great help\" href=\"http:\/\/www.rjmprogramming.com.au\/\/MySql\/mysqlemployees.py_GETME\" rel=\"noopener\">mysqlemployees.py<\/a> to create the DDL SQL necessary to create the tables needed to support the MySql sample Employees database.  To populate those tables we used MySql&#8217;s <a target=\"_blank\" title=\"MySql Employee Sample Database\" href=\"https:\/\/dev.mysql.com\/doc\/employee\/en\/employees-installation.html\" rel=\"noopener\">Employees Sample Database<\/a> webpage (and associated downloads and other webpages). At the end of today&#8217;s <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/MySql\/mysql_python_testdb.pdf\" title=\"Click picture\" rel=\"noopener\">PDF slideshow<\/a> presentation, we show some MySql SQL queries of that Employee Sample Database.<\/p>\n<p>We&#8217;ll leave you with some pertinent online websites we visited creating today&#8217;s blog posting &#8230;<\/p>\n<div id=\"main-container\" class=\"\">\n<div id=\"background-clip\">\n<div id=\"background\"><\/div>\n<\/p><\/div>\n<div id=\"date-accessed\" style=display:none; class=\"card-title\">\n        Today &#8211; Tuesday, 15 May 2018\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"13:58  MySQL :: Employees Sample Database :: 5 Employees Structure dev.mysql.com\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\" title=\"Tue May 15 2018 13:58:52 GMT+1000 (AEST)\"><br \/>\n          13:58<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/dev.mysql.com\/doc\/employee\/en\/sakila-structure.html&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/dev.mysql.com\/doc\/employee\/en\/sakila-structure.html&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"MySQL :: Employees Sample Database :: 5 Employees Structure\" href=\"https:\/\/dev.mysql.com\/doc\/employee\/en\/sakila-structure.html\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>MySQL :: Employees Sample Database :: 5 Employees Structure<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">dev.mysql.com<\/span>\n        <\/div>\n<div id=\"star-container\">\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"time-gap-separator\" hidden=\"\"><\/div>\n<\/p><\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"13:45  MySQL :: Employees Sample Database :: 4 Validating the Employee Data dev.mysql.com\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\" title=\"Tue May 15 2018 13:45:14 GMT+1000 (AEST)\"><br \/>\n          13:45<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/dev.mysql.com\/doc\/employee\/en\/employees-validation.html&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/dev.mysql.com\/doc\/employee\/en\/employees-validation.html&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"MySQL :: Employees Sample Database :: 4 Validating the Employee Data\" href=\"https:\/\/dev.mysql.com\/doc\/employee\/en\/employees-validation.html\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>MySQL :: Employees Sample Database :: 4 Validating the Employee Data<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">dev.mysql.com<\/span>\n        <\/div>\n<div id=\"star-container\">\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"13:39  MySQL :: Employees Sample Database :: 3 Installation dev.mysql.com\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\" title=\"Tue May 15 2018 13:39:14 GMT+1000 (AEST)\"><br \/>\n          13:39<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/dev.mysql.com\/doc\/employee\/en\/employees-installation.html&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/dev.mysql.com\/doc\/employee\/en\/employees-installation.html&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"MySQL :: Employees Sample Database :: 3 Installation\" href=\"https:\/\/dev.mysql.com\/doc\/employee\/en\/employees-installation.html\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>MySQL :: Employees Sample Database :: 3 Installation<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">dev.mysql.com<\/span>\n        <\/div>\n<div id=\"star-container\">\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"13:22 Bookmarked GitHub - datacharmer\/test_db: A sample MySQL database with an integrated test suite, used to test your applications and database servers github.com\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\" title=\"Tue May 15 2018 12:02:18 GMT+1000 (AEST)\"><br \/>\n          13:22<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/github.com\/datacharmer\/test_db&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/github.com\/datacharmer\/test_db&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"GitHub - datacharmer\/test_db: A sample MySQL database with an integrated test suite, used to test your applications and database servers\" href=\"https:\/\/github.com\/datacharmer\/test_db\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>GitHub &#8211; datacharmer\/test_db: A sample MySQL database with an integrated test suite, used to test your applications and database servers<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">github.com<\/span>\n        <\/div>\n<div id=\"star-container\">\n<p>            <button is=\"paper-icon-button-light\" style=display:none;     id=\"bookmark-star\" title=\"Remove bookmark\" focus-type=\"star\" tabindex=\"-1\" style=\"\"><br \/>\n              <iron-icon icon=\"cr:star\"><\/iron-icon><br \/>\n            <\/button><br \/>\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"13:21  MySQL :: Employees Sample Database dev.mysql.com\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\" title=\"Tue May 15 2018 13:21:15 GMT+1000 (AEST)\"><br \/>\n          13:21<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/dev.mysql.com\/doc\/employee\/en\/&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/dev.mysql.com\/doc\/employee\/en\/&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"MySQL :: Employees Sample Database\" href=\"https:\/\/dev.mysql.com\/doc\/employee\/en\/\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>MySQL :: Employees Sample Database<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">dev.mysql.com<\/span>\n        <\/div>\n<div id=\"star-container\">\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"12:47 Bookmarked MySQL :: MySQL Connector\/Python Developer Guide :: 5.2 Creating Tables Using Connector\/Python dev.mysql.com\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\"><br \/>\n          12:47<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/dev.mysql.com\/doc\/connector-python\/en\/connector-python-example-ddl.html&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/dev.mysql.com\/doc\/connector-python\/en\/connector-python-example-ddl.html&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"MySQL :: MySQL Connector\/Python Developer Guide :: 5.2 Creating Tables Using Connector\/Python\" href=\"https:\/\/dev.mysql.com\/doc\/connector-python\/en\/connector-python-example-ddl.html\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>MySQL :: MySQL Connector\/Python Developer Guide :: 5.2 Creating Tables Using Connector\/Python<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">dev.mysql.com<\/span>\n        <\/div>\n<div id=\"star-container\">\n<p>            <button is=\"paper-icon-button-light\" style=display:none;     id=\"bookmark-star\" title=\"Remove bookmark\" focus-type=\"star\" tabindex=\"-1\" style=\"\"><br \/>\n              <iron-icon icon=\"cr:star\"><\/iron-icon><br \/>\n            <\/button><br \/>\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"12:37 Bookmarked https:\/\/pip.pypa.io\/en\/stable\/installing\/#upgrading-pip pip.pypa.io\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\" title=\"Tue May 15 2018 12:37:40 GMT+1000 (AEST)\"><br \/>\n          12:37<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/pip.pypa.io\/en\/stable\/installing\/#upgrading-pip&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/pip.pypa.io\/en\/stable\/installing\/#upgrading-pip&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"https:\/\/pip.pypa.io\/en\/stable\/installing\/#upgrading-pip\" href=\"https:\/\/pip.pypa.io\/en\/stable\/installing\/#upgrading-pip\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>https:\/\/pip.pypa.io\/en\/stable\/installing\/#upgrading-pip<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">pip.pypa.io<\/span>\n        <\/div>\n<div id=\"star-container\">\n<p>            <button is=\"paper-icon-button-light\" style=display:none;     id=\"bookmark-star\" title=\"Remove bookmark\" focus-type=\"star\" tabindex=\"-1\" style=\"\"><br \/>\n              <iron-icon icon=\"cr:star\"><\/iron-icon><br \/>\n            <\/button><br \/>\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"12:31  Installation \u2014 pip 10.0.1 documentation pip.pypa.io\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\"><br \/>\n          12:31<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/pip.pypa.io\/en\/stable\/installing\/&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/pip.pypa.io\/en\/stable\/installing\/&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"Installation \u2014 pip 10.0.1 documentation\" href=\"https:\/\/pip.pypa.io\/en\/stable\/installing\/\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>Installation \u2014 pip 10.0.1 documentation<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">pip.pypa.io<\/span>\n        <\/div>\n<div id=\"star-container\">\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"12:27  4. Using Python on a Macintosh \u2014 Python 2.7.15 documentation docs.python.org\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\" title=\"Tue May 15 2018 12:27:16 GMT+1000 (AEST)\"><br \/>\n          12:27<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/docs.python.org\/2\/using\/mac.html&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/docs.python.org\/2\/using\/mac.html&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"4. Using Python on a Macintosh \u2014 Python 2.7.15 documentation\" href=\"https:\/\/docs.python.org\/2\/using\/mac.html\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>4. Using Python on a Macintosh \u2014 Python 2.7.15 documentation<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">docs.python.org<\/span>\n        <\/div>\n<div id=\"star-container\">\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"12:23  python - ImportError: No module named 'MySQL' - Stack Overflow stackoverflow.com\" focus-type=\"checkbox\" tabindex=\"0\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\" title=\"Tue May 15 2018 12:23:22 GMT+1000 (AEST)\"><br \/>\n          12:23<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/stackoverflow.com\/questions\/32877671\/importerror-no-module-named-mysql\/35638093&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/stackoverflow.com\/questions\/32877671\/importerror-no-module-named-mysql\/35638093&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"python - ImportError: No module named 'MySQL' - Stack Overflow\" href=\"https:\/\/stackoverflow.com\/questions\/32877671\/importerror-no-module-named-mysql\/35638093\" focus-type=\"title\" tabindex=\"0\"><br \/>\n            <history-searched-label>python &#8211; ImportError: No module named &#8216;MySQL&#8217; &#8211; Stack Overflow<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">stackoverflow.com<\/span>\n        <\/div>\n<div id=\"star-container\">\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"0\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"12:22  Python: ImportError no module named mysql.connector - Stack Overflow stackoverflow.com\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\" title=\"Tue May 15 2018 12:22:28 GMT+1000 (AEST)\"><br \/>\n          12:22<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/stackoverflow.com\/questions\/44015654\/python-importerror-no-module-named-mysql-connector&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/stackoverflow.com\/questions\/44015654\/python-importerror-no-module-named-mysql-connector&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"Python: ImportError no module named mysql.connector - Stack Overflow\" href=\"https:\/\/stackoverflow.com\/questions\/44015654\/python-importerror-no-module-named-mysql-connector\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>Python: ImportError no module named mysql.connector &#8211; Stack Overflow<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">stackoverflow.com<\/span>\n        <\/div>\n<div id=\"star-container\">\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"12:20 Bookmarked MySQL :: MySQL Connector\/Python Developer Guide :: 5.1 Connecting to MySQL Using Connector\/Python dev.mysql.com\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\" title=\"Tue May 15 2018 12:20:14 GMT+1000 (AEST)\"><br \/>\n          12:20<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/dev.mysql.com\/doc\/connector-python\/en\/connector-python-example-connecting.html&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/dev.mysql.com\/doc\/connector-python\/en\/connector-python-example-connecting.html&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"MySQL :: MySQL Connector\/Python Developer Guide :: 5.1 Connecting to MySQL Using Connector\/Python\" href=\"https:\/\/dev.mysql.com\/doc\/connector-python\/en\/connector-python-example-connecting.html\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>MySQL :: MySQL Connector\/Python Developer Guide :: 5.1 Connecting to MySQL Using Connector\/Python<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">dev.mysql.com<\/span>\n        <\/div>\n<div id=\"star-container\">\n<p>            <button is=\"paper-icon-button-light\" style=display:none;     id=\"bookmark-star\" title=\"Remove bookmark\" focus-type=\"star\" tabindex=\"-1\" style=\"\"><br \/>\n              <iron-icon icon=\"cr:star\"><\/iron-icon><br \/>\n            <\/button><br \/>\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"12:18  MySQL :: MySQL Connector\/Python Developer Guide :: 4 Connector\/Python Installation dev.mysql.com\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\" title=\"Tue May 15 2018 12:18:24 GMT+1000 (AEST)\"><br \/>\n          12:18<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/dev.mysql.com\/doc\/connector-python\/en\/connector-python-installation.html&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/dev.mysql.com\/doc\/connector-python\/en\/connector-python-installation.html&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"MySQL :: MySQL Connector\/Python Developer Guide :: 4 Connector\/Python Installation\" href=\"https:\/\/dev.mysql.com\/doc\/connector-python\/en\/connector-python-installation.html\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>MySQL :: MySQL Connector\/Python Developer Guide :: 4 Connector\/Python Installation<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">dev.mysql.com<\/span>\n        <\/div>\n<div id=\"star-container\">\n          <button is=\"paper-icon-button-light\" style=display:none;     id=\"bookmark-star\" title=\"Remove bookmark\" focus-type=\"star\" tabindex=\"-1\" style=\"display: none;\"><br \/>\n              <iron-icon icon=\"cr:star\"><\/iron-icon><br \/>\n            <\/button><template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"12:18  MySQL :: Download Connector\/Python dev.mysql.com\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\" title=\"Tue May 15 2018 12:18:13 GMT+1000 (AEST)\"><br \/>\n          12:18<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/https:\/\/dev.mysql.com\/downloads\/connector\/python\/&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/https:\/\/dev.mysql.com\/downloads\/connector\/python\/&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"MySQL :: Download Connector\/Python\" href=\"https:\/\/dev.mysql.com\/downloads\/connector\/python\/\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>MySQL :: Download Connector\/Python<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">dev.mysql.com<\/span>\n        <\/div>\n<div id=\"star-container\">\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<div id=\"item-container\">\n        <button is=\"paper-icon-button-light\" style=display:none;  id=\"checkbox\" role=\"checkbox\" aria-checked=\"true\" aria-label=\"12:14  MySQL Forums - Connector\/Python etymons.rssing.com\" focus-type=\"checkbox\" tabindex=\"-1\"><\/p>\n<div id=\"checkmark\"><\/div>\n<p>        <\/button><br \/>\n        <span style=display:none; id=\"time-accessed\"><br \/>\n          12:14<br \/>\n        <\/span><\/p>\n<div class=\"website-icon\" style=display:none;    id=\"icon\" style=\"background-image: -webkit-image-set(url(&quot;chrome:\/\/favicon\/size\/16@1x\/http:\/\/etymons.rssing.com\/chan-1320976\/latest.php&quot;) 1x, url(&quot;chrome:\/\/favicon\/size\/16@2x\/http:\/\/etymons.rssing.com\/chan-1320976\/latest.php&quot;) 2x);\"><\/div>\n<div id=\"title-and-domain\">\n          <a id=\"title\" class=\"website-title\" title=\"MySQL Forums - Connector\/Python\" href=\"http:\/\/etymons.rssing.com\/chan-1320976\/latest.php\" focus-type=\"title\" tabindex=\"-1\"><br \/>\n            <history-searched-label>MySQL Forums &#8211; Connector\/Python<\/history-searched-label><br \/>\n          <\/a><br \/>\n          <span style=display:none; id=\"domain\">etymons.rssing.com<\/span>\n        <\/div>\n<div id=\"star-container\">\n          <template is=\"dom-if\" notify-dom-change=\"\"><\/template>\n        <\/div>\n<p>        <button is=\"paper-icon-button-light\" style=display:none;   id=\"menu-button\" class=\"more-vert-button\" title=\"Actions\" focus-type=\"menu-button\" tabindex=\"-1\"><\/p>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p>        <\/button>\n      <\/div>\n<hr>\n<p id='pmscpdtpt'>Previous relevant <a target=\"_blank\" title='Python MySql Circle and Point DataTable Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/python-mysql-circle-and-point-datatable-primer-tutorial\/' rel=\"noopener\">Python MySql Circle and Point DataTable Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/Python\/mysql_db.pdf\" rel=\"noopener\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Python MySql Circle and Point DataTable Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/Python\/mysql_db.jpg\" title=\"Python MySql Circle and Point DataTable Primer Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Python MySql Circle and Point DataTable Primer Tutorial<\/p><\/div>\n<p>When we&#8217;ve talked about the MySql database in the past, apart from going on and on and on and on and on and on about the wonders of the <a target=\"_blank\" title='phpMyAdmin' href='https:\/\/www.phpmyadmin.net\/' rel=\"noopener\">phpMyAdmin<\/a> MySql management tool frontend, we&#8217;ve normally talked about it regarding its <a target=\"_blank\" title='Fred and Ginger' href='https:\/\/www.youtube.com\/watch?v=YFI0rFFp8j8' rel=\"noopener\">&#8220;Fred and Ginger&#8221;<\/a> relationship to PHP.  Well, Ginger was famous before Fred came along, and who can forget Fred in the <a target=\"_blank\" title='Towering Inferno' href='https:\/\/www.youtube.com\/watch?v=zsRnQQpklPM' rel=\"noopener\">Towering Inferno<\/a> movie, with no Ginger in sight &#8230; mind you, can&#8217;t remember if there were any scenes with people eating cashew chicken for lunch in that movie?!  My point is, and here&#8217;s the thing, MySql can be a database for other languages just as other languages can go off looking for other databases, for example, have a peruse of <a target=\"_blank\" href='https:\/\/www.rjmprogramming.com.au\/ITblog\/postgresql-php-tutorial\/' title='PostgreSQL PHP Tutorial' rel=\"noopener\">PostgreSQL PHP Tutorial<\/a>.<\/p>\n<p>Our new teaming today is, if you haven&#8217;t guessed it already, Python and MySql.  We set this up locally on our Mac OS X MacBook Pro system, and wanted it to live, and not interfere with our beloved <a target=\"_blank\" title='MAMP' href='http:\/\/www.mamp.info' rel=\"noopener\">MAMP<\/a> local Apache\/PHP\/MySql environment, which panned out to be no issue at all, working with those MySql tables featured in <a title='Circle and Point jQuery DataTable Primer Tutorial' href='#cpqdtpt'>Circle and Point jQuery DataTable Primer Tutorial<\/a>.  More, the difficulties came with installing the <b>MySQLdb<\/b> Python module necessary to make the Python (version 3) code below work &#8230;<\/p>\n<p><code><br \/>\n#!\/usr\/bin\/python<br \/>\n# Python MySql tester<br \/>\n# RJM Programming<br \/>\n# October, 2017<br \/>\n# Thanks to <a target=\"_blank\" title='Useful link, thanks' href='https:\/\/stackoverflow.com\/questions\/372885\/how-do-i-connect-to-a-mysql-database-in-python' rel=\"noopener\">https:\/\/stackoverflow.com\/questions\/372885\/how-do-i-connect-to-a-mysql-database-in-python<\/a><br \/>\n<b>import MySQLdb<\/b><br \/>\n<b><\/b><br \/>\n<i>db = MySQLdb.connect(host=\"localhost\",    # your host, usually localhost<br \/>\n                     user=\"root\",         # your username<br \/>\n                     passwd=\"root\",<br \/>\n                     unix_socket=\"\/Applications\/MAMP\/tmp\/mysql\/mysql.sock\",<br \/>\n                     db=\"testdb\")        # name of the data base<\/i><br \/>\n<b><\/b><br \/>\n# you must create a Cursor object. It will let<br \/>\n#  you execute all the queries you need<br \/>\ncur = db.cursor()<br \/>\n<b><\/b><br \/>\n# Use all the SQL you like<br \/>\ncur.execute(\"SELECT * FROM CIRCLE,POINT where originid=pointid\")<br \/>\n<b><\/b><br \/>\n# print some cells of all the rows<br \/>\nprint \"radius\", \"x   \", \"y\"<br \/>\nfor row in cur.fetchall():<br \/>\n    print row[2], row[4], row[5]<br \/>\n<b><\/b><br \/>\ndb.close()<br \/>\n<\/code><\/p>\n<p> &#8230; also download with <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/Python\/mysql_db.py_GETME\" title=\"mysql_db.py\" rel=\"noopener\">mysql_db.py<\/a> link &#8230; via, and resulting in &#8230;<\/p>\n<p><code><br \/>\n$ python &lt; mysql_db.py<br \/>\nradius x    y<br \/>\n99.0 221.0 170.0<br \/>\n55.0 222.0 111.0<br \/>\n$<br \/>\n<\/code><\/p>\n<p>So, that install on Mac OS X, for us, as suggested at this <a target=\"_blank\" title='Python MysqlDB install on Mac OS X help, thanks' href='https:\/\/stackoverflow.com\/questions\/454854\/no-module-named-mysqldb' rel=\"noopener\">useful link<\/a>, thanks, involved Mac OS X Terminal application&#8217;s command line commands &#8230;<\/p>\n<p><code><br \/>\nsudo brew install mysql-connector-c<br \/>\nsudo pip install MySQL-python<br \/>\n<\/code><\/p>\n<p>In our stream of consciousness <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/Python\/mysql_db.pdf\" title=\"Click picture\" rel=\"noopener\">PDF slideshow<\/a> we show you this installing and the other tricky bit, that being, the Python code&#8217;s <i>MySql connection code<\/i>, and how we crept up on how to approach that.  Along the way you can see phpMyAdmin in action, as the tool to show the structure of the MySql database, and to verify that the Python program outputs agree with the MySql database content.<\/p>\n<hr>\n<p id='cpqdtpt'>Previous relevant <a target=\"_blank\" title='Circle and Point jQuery DataTable Primer Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/circle-and-point-jquery-datatable-primer-tutorial\/' rel=\"noopener\">Circle and Point jQuery DataTable Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/circle_point_jquery_datatable.html\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Circle and Point jQuery DataTable Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/circle_point_jquery_datatable.jpg\" title=\"Circle and Point jQuery DataTable Primer Tutorial\"   \/><\/a><p class=\"wp-caption-text\">Circle and Point jQuery DataTable Primer Tutorial<\/p><\/div>\n<p>Perhaps you are a reader who has been interested in the &#8220;backend&#8221; of web application development, traditionally the database side of Information Technology software development.  And maybe along the way you were reading when we presented <a title='MySql Stored Procedures Primer Tutorial' href='#msppt'>MySql Stored Procedures Primer Tutorial<\/a> as shown below?   Well, today we take its data &#8220;thoughts&#8221; and funnel that through the brilliant, the stupendous jQuery (Javascript library) <a target=\"_blank\" title='jQuery DataTable webpage' href='https:\/\/datatables.net\/examples\/advanced_init\/events_live.html' rel=\"noopener\">DataTable<\/a> functionality.<\/p>\n<p>For a lot of programmers, we tend to hone in on <a target=\"_blank\" href='https:\/\/en.wikipedia.org\/wiki\/Table_(database)' title='Database table information from Wikipedia ... thanks' rel=\"noopener\">Data Tables<\/a>, in a database, as the most latch-able onto-able thing about databases &#8230; or maybe that&#8217;s just me &#8230; anyway, the Data Table is that &#8220;thing&#8221; in a database consisting of data presented in &#8230;<\/p>\n<ul>\n<li>columns &#8230; to do with the &#8220;type&#8221; (or types) of data &#8230; and &#8230;<\/li>\n<li>rows &#8230; to do with the &#8220;order&#8221; of data<\/li>\n<\/ul>\n<p> &#8230; like you are probably familiar with regarding spreadsheets &#8230; ie. the letters up the top are like &#8220;columns&#8221; and the &#8220;numbers&#8221; on the left hand side are like &#8220;rows&#8221; with respect to what we&#8217;re talking about above.  As you can tell from this, a spreadsheet worksheet is a lot like a database Data Table.<\/p>\n<p>Continuing that spreadsheet analogy, you spreadsheet enthusiasts probably have seen the concept of multiple worksheets within the one spreadsheet?  Well, that is like our scenario today where we have two Data Tables called &#8230;<\/p>\n<ul>\n<li>Point<\/li>\n<li>Circle<\/li>\n<\/ul>\n<p> &#8230; and for both tables we&#8217;re going to have these numerical &#8220;count&#8221; <a target=\"_blank\" title='Database index information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Database_index' rel=\"noopener\">indexes<\/a>, as is so common in <a target=\"_blank\" href='https:\/\/en.wikipedia.org\/wiki\/Relational_database_management_system' title='Relational Database Management System information from Wikipedia ... thanks' rel=\"noopener\">RDBMS<\/a> work, because computers can sort faster and join things faster with numerical data.  The trade off, as for us, if you imagine it, is, that there can be <a target=\"_blank\" title='Data Redundancy' href='https:\/\/www.techopedia.com\/definition\/18707\/data-redundancy' rel=\"noopener\">Data Redundancy<\/a>, or &#8220;inefficiency&#8221; in that as far as the &#8220;Point&#8221; Data Table goes, we may have the same (x,y) co-ordinate set existing multiple times, and we&#8217;ll define a unique &#8220;row&#8221; (or record) for both of these, yet, you&#8217;d have to agree, that this is, perhaps inefficient and wasteful.  The upside, though, is it is not making my head hurt, because there is a one to one relationship between a &#8220;Point&#8221; (Data Table) row and a &#8220;Circle&#8221; row, making the Javascript logic we perform, and you can see with <a target=\"_blank\" title='circle_point_jquery_datatable.html' href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/circle_point_jquery_datatable.html_GETME' rel=\"noopener\">circle_point_jquery_datatable.html<\/a> less involved with what we are doing today.  And what is that, pray tell?<\/p>\n<p>We&#8217;re going to let the brilliance of jQuery display that aforesaid mentioned data in its inimitable style &#8230; such panache!  And then we are going to add &#8220;row&#8221; click event functionality to draw the <i>point<\/i> or <i>circle<\/i> of that (Data Table) row be drawn up the top using HTML <a target=\"_blank\" title='SVG information from w3schools' href='http:\/\/www.w3schools.com\/svg\/' rel=\"noopener\">SVG<\/a> graphics.  You can also have &#8220;column&#8221; click events, but we choose &#8220;row&#8221; clicks to be interested in, because on a row click, the whole <a target=\"_blank\" href='http:\/\/www.w3schools.com\/jsref\/prop_html_innerhtml.asp' title='Javascript DOM innerHTML property information from w3schools' rel=\"noopener\">&#8220;.innerHTML&#8221;<\/a> of that row&#8217;s (HTML tr) element is accessible in the logic, and so &#8230;<\/p>\n<ul>\n<li>should you click on a Point row we draw (x,y) with some co-ordinate text &#8230; and &#8230;<\/li>\n<li>should you click on a Circle row we extract the equivalent Point&#8217;s (x,y) to be the circle&#8217;s SVG (CX,CY) centre point (easily done because of that one to one correspondence we talked about above), and have the radius value in the last &#8220;column&#8221; cell of the Circle row we are on, enabling everything we need to draw an SVG circle element<\/li>\n<\/ul>\n<p>Now in all this, we talked about the &#8220;one to one correspondence&#8221; numerical indexes, but in practice to make this more robust, in case a superfluous &#8220;Point&#8221; row is deleted by a do-gooder user later down the track, you may have noticed that all along, the second &#8220;column&#8221; of the Circle (Data Table) (even though called &#8220;originid&#8221;) points back (ie. is the same value) as the Point table&#8217;s first (and index) column (called &#8220;pointid&#8221;) and these <a target=\"_blank\" title='Database table join in SQL information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Join_(SQL)' rel=\"noopener\">&#8220;join&#8221;<\/a> fields (another name for &#8220;column&#8221; can be &#8220;field&#8221;) can still gather apples with other proper apples, in that scenario.  But today, that is overkill, because there is no &#8220;delete&#8221; row (or &#8220;record&#8221;) functionality in our web application today.  That web application you can try for yourself with this <a target=\"_blank\" title='circle_point_jquery_datatable.html' href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/circle_point_jquery_datatable.html' rel=\"noopener\">live run<\/a> link.<\/p>\n<hr>\n<p id='msppt'>Previous relevant <a target=\"_blank\" title='MySql Stored Procedures Primer Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/mysql-stored-procedures-primer-tutorial\/' rel=\"noopener\">MySql Stored Procedures Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/MySql\/StoredProcedure\/MySql_StoredProcedure_Primer.jpg\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"MySql Stored Procedures Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/MySql\/StoredProcedure\/MySql_StoredProcedure_Primer.jpg\" title=\"MySql Stored Procedures Primer Tutorial\"   \/><\/a><p class=\"wp-caption-text\">MySql Stored Procedures Primer Tutorial<\/p><\/div>\n<p>Today&#8217;s tutorial follows up on <a href='#pitmappt' title='phpMyAdmin interface to MySql and PHP Primer Tutorial'>phpMyAdmin interface to MySql and PHP Primer Tutorial<\/a> in that we again use the brilliant phpMyAdmin to oversee the results of some PHP code which uses MySql calls to create tables called POINT and CIRCLE used to store information defining a circle, and then it creates three MySql stored procedures in the database to help add circle data with the single MySql statement that goes <em>CALL AddCircle(x, y, radius);<\/em> via the use of those stored procedures.   Let&#8217;s see below what <a target=\"_blank\" title='Stored Procedures information from Wikipedia' href='http:\/\/en.wikipedia.org\/wiki\/Stored_procedure' rel=\"noopener\">Wikipedia<\/a> says about Stored Procedures generally.<\/p>\n<blockquote><p>A stored procedure is a subroutine available to applications that access a relational database system. A stored procedure (sometimes called a proc, sproc, StoPro, StoredProc, sp or SP) is actually stored in the database data dictionary.<\/p>\n<p>Typical use for stored procedures include data validation (integrated into the database) or access control mechanisms. Furthermore, stored procedures can consolidate and centralize logic that was originally implemented in applications. Extensive or complex processing that requires execution of several SQL statements is moved into stored procedures, and all applications call the procedures. One can use nested stored procedures by executing one stored procedure from within another.<\/p>\n<p>Stored procedures are similar to user-defined functions (UDFs). The major difference is that UDFs can be used like any other expression within SQL statements, whereas stored procedures must be invoked using the CALL statement.[1]<\/p><\/blockquote>\n<p>Here is some downloadable PHP programming source code which shows the results of the MySql SQL requests made and can be renamed to <a target=\"_blank\" title='ourmysqlstoreprocedure.php' href='http:\/\/www.rjmprogramming.com.au\/MySql\/StoredProcedure\/ourmysqlstoredprocedure.php_GETME' rel=\"noopener\">ourmysqlstoredprocedure.php<\/a> as required.<\/p>\n<p>Here is some downloadable supervisory PHP programming source code which gathers the MySql SQL requests made and can be renamed to <a target=\"_blank\" title='ourmysql_storeprocedure.php' href='http:\/\/www.rjmprogramming.com.au\/MySql\/StoredProcedure\/ourmysql_storedprocedure.php_GETME' rel=\"noopener\">ourmysql_storedprocedure.php<\/a> as required.<\/p>\n<p>If you want to develop your own live usage (have provided a live usage link <a target=\"_blank\" title='live usage or to see the raw MySql SQL involved in this tutorail' href='http:\/\/www.rjmprogramming.com.au\/MySql\/StoredProcedure\/' rel=\"noopener\">here<\/a> which will not work but you can use if you are a beginner, to get used to mysql errors, which will occur after you hit either button of the link (these errors indicate bad MySql connection details which are the same reason the database dropdown is not full of options), or you can use this link to see the raw MySql SQL involved in piecing this tutorial together) of these two PHP source codes then you could fix up the hard codings for MySql host\/username\/password up the top of ourmysql_storeprocedure.php (where you may notice that the default host in the code is localhost:8889 which is the default host string for MySql (ie. <a target=\"_blank\" title='port explained by Wikipedia' href='http:\/\/en.wikipedia.org\/wiki\/Port_%28computer_networking%29' rel=\"noopener\">port<\/a> 8889 is used) when using a <a target=\"_blank\" title='PHP and MySql via MAMP Primer Tutorial' href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=933' rel=\"noopener\">MAMP<\/a> (Mac laptop) local web server (which uses localhost:8888 as its local &#8220;domain name&#8221; for http usage)) or you can keep the same code and use a URL like:<\/p>\n<p>[your-domain-name-plus-a-bit-maybe]\/ourmysql_storeprocedure.php?host=[your MySql host address]&#038;username=[your MySql username]&#038;password=[your MySql password]&#038;database=[your optional MySql default database name within the looked up list presented]<\/p>\n<hr \/>\n<p id='pitmappt'>Previous <a href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=492' title='phpMyAdmin interface to MySql and PHP Primer Tutorial'>phpMyAdmin interface to MySql and PHP Primer Tutorial<\/a> is relevant and shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/phpMyAdmin\/iFrame.html\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"phpMyAdmin interface to MySql and PHP Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/phpMyAdmin\/phpMyAdmin.jpg\" title=\"phpMyAdmin interface to MySql and PHP Primer Tutorial\"   \/><\/a><p class=\"wp-caption-text\">phpMyAdmin interface to MySql and PHP Primer Tutorial<\/p><\/div>\n<p><strong><\/p>\n<p>Transcript:<\/p>\n<p><\/strong><\/p>\n<p>You never hear much about the data when you hear about great PHP products, but we<br \/>\n   all know it is the data that differentiates the quality of the end result.<\/p>\n<p>That is probably because database products like MySql, SqlServer, Oracle SQL, Advantage and Access<br \/>\n   are pretty good at what they do, and emphasise reliability rather than flashiness.<\/p>\n<p>MySql and PHP have a great open source interface with phpMyAdmin, which is so good,<br \/>\n  you forget that it is not the default MySql administrator&#8217;s interface product.<\/p>\n<p>Let&#8217;s have a look at this WordPress database and a bit of how it looks, looking<br \/>\n  through the prism of  <a target=\"_blank\" title='click picture' href='http:\/\/www.rjmprogramming.com.au\/phpMyAdmin\/iFrame.html' rel=\"noopener\">phpMyAdmin<\/a> &#8230;\n<\/p>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d492' onclick='var dv=document.getElementById(\"d492\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"http:\/\/www.rjmprogramming.com.au\/wordpress\/?cat=47\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d492' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr \/>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d3849' onclick='var dv=document.getElementById(\"d3849\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"http:\/\/www.rjmprogramming.com.au\/wordpress\/?cat=47\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d3849' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d26384' onclick='var dv=document.getElementById(\"d26384\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/svg\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d26384' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d33581' onclick='var dv=document.getElementById(\"d33581\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/mysql\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d33581' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d38196' onclick='var dv=document.getElementById(\"d38196\"); dv.innerHTML = \"<iframe width=670 height=600 src=\" + \"\/\/www.rjmprogramming.com.au\/ITblog\/tag\/database\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d38196' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d44767' onclick='var dv=document.getElementById(\"d44767\"); dv.innerHTML = \"<iframe width=670 height=600 src=\" + \"\/\/www.rjmprogramming.com.au\/ITblog\/tag\/blob\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d44767' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>No, Nala, we can&#8217;t see The Blob for the 743rd time today. But we can discuss &#8220;blob&#8221; in terms of MySql database file storage. It&#8217;s that, or a bath?! Okay, that&#8217;s settled, so make yourself comfortable with your favourite bone &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/python-mysql-connector-blob-tutorial\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,1,29,37],"tags":[2051,252,2127,299,418,2937,725,734,2178,2844,744,2943,827,2942,997,1012,1866,1186,1252,1319,1341],"class_list":["post-44767","post","type-post","status-publish","format-standard","hentry","category-elearning","category-uncategorised","category-operating-system","category-tutorials","tag-blob","tag-connection","tag-cursor","tag-database-2","tag-file","tag-insert","tag-mac-os-x","tag-macbook-pro","tag-macos","tag-macos-mojave","tag-mamp","tag-mobule","tag-mysql","tag-mysql-connecvtor","tag-programming","tag-python","tag-select","tag-sql","tag-terminal","tag-tutorial","tag-update"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/44767"}],"collection":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/comments?post=44767"}],"version-history":[{"count":5,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/44767\/revisions"}],"predecessor-version":[{"id":64614,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/44767\/revisions\/64614"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=44767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=44767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=44767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}