title: Python / MySQL : Programming error 1146 - Table doesn't exist
body: <p>My goal is to create a database which includes tables (and entries) describing containing information about S&amp;P 500 constituents.</p>
  
  <p>1) I have installed MySQL using homebrew, created a database and a table named 'securities_master' </p>
  
  <p><img src="https://i.stack.imgur.com/5pvVr.png" alt="Terminal screen grab"></p>
  
  <p>2) I open spyder and enter the following</p>
  
  <pre><code>#!/usr/bin/env python2
  # -*- coding: utf-8 -*-
  # insert_symbols.py
  """
  Created on Fri Jan 13 17:42:53 2017
  
  @author: 
  """
  
  
  
  from __future__ import print_function
  
  import datetime
  from math import ceil
  import bs4
  import MySQLdb as mdb
  import requests
  
  
  def obtain_parse_wiki_snp500():
  """
  Download and parse the Wikipedia list of S&amp;P500 
  constituents using requests and BeautifulSoup.
  
  Returns a list of tuples for to add to MySQL.
  """
  # Stores the current time, for the created_at record
  now = datetime.datetime.utcnow()
  
  # Use requests and BeautifulSoup to download the 
  # list of S&amp;P500 companies and obtain the symbol table
  response = requests.get(
      "http://en.wikipedia.org/wiki/List_of_S%26P_500_companies"
  )
  soup = bs4.BeautifulSoup(response.text)
  
  # This selects the first table, using CSS Selector syntax
  # and then ignores the header row ([1:])
  symbolslist = soup.select('table')[0].select('tr')[1:]
  
  # Obtain the symbol information for each 
  # row in the S&amp;P500 constituent table
  symbols = []
  for i, symbol in enumerate(symbolslist):
      tds = symbol.select('td')
      symbols.append(
          (
              tds[0].select('a')[0].text,  # Ticker
              'stock', 
              tds[1].select('a')[0].text,  # Name
              tds[3].text,  # Sector
              'USD', now, now
          ) 
      )
  return symbols
  
  
  def insert_snp500_symbols(symbols):
  """
  Insert the S&amp;P500 symbols into the MySQL database.
  """
  # Connect to the MySQL instance
  db_host = 'localhost'
  db_user = 'root'
  db_pass = ''
  db_name = 'securities_master'
  con = mdb.connect(
      host=db_host, user=db_user, passwd=db_pass, db=db_name
  )
  
  # Create the insert strings
  column_str = """ticker, instrument, name, sector, 
               currency, created_date, last_updated_date
               """
  insert_str = ("%s, " * 7)[:-2]
  final_str = "INSERT INTO symbol (%s) VALUES (%s)" % \
      (column_str, insert_str)
  
  # Using the MySQL connection, carry out 
  # an INSERT INTO for every symbol
  with con: 
      cur = con.cursor()
      cur.executemany(final_str, symbols)
  
  
  if __name__ == "__main__":
  symbols = obtain_parse_wiki_snp500()
  insert_snp500_symbols(symbols)
  print("%s symbols were successfully added." % len(symbols))
  </code></pre>
  
  <p>3) The above is copied verbatim from the book and is supposed to populate the 'symbol' table in 'securities_master' however as you can see it returns an error... </p>
  
  <pre><code>in [2]: runfile('/Users/alexfawzi/untitled4.py',           wdir='/Users/alexfawzi')
  Traceback (most recent call last):
  
  File "&lt;ipython-input-2-ecff2c9aa5ce&gt;", line 1, in &lt;module&gt;
  runfile('/Users/alexfawzi/untitled4.py', wdir='/Users/alexfawzi')
  
  File "/Users/alexfawzi/anaconda/lib/python2.7/site-    packages/spyder/utils/site/sitecustomize.py", line 866, in runfile
  execfile(filename, namespace)
  
  File "/Users/alexfawzi/anaconda/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 94, in execfile
  builtins.execfile(filename, *where)
  
  File "/Users/alexfawzi/untitled4.py", line 92, in &lt;module&gt;
  insert_snp500_symbols(symbols)
  
  File "/Users/alexfawzi/untitled4.py", line 87, in insert_snp500_symbols
  cur.executemany(final_str, symbols)
  
  File "/Users/alexfawzi/anaconda/lib/python2.7/site-packages/MySQLdb/cursors.py", line 253, in executemany
  r = self._query('\n'.join([query[:p], ',\n'.join(q), query[e:]]))
  
  File "/Users/alexfawzi/anaconda/lib/python2.7/site-packages/MySQLdb/cursors.py", line 346, in _query
  rowcount = self._do_query(q)
  
  File "/Users/alexfawzi/anaconda/lib/python2.7/site-packages/MySQLdb/cursors.py", line 310, in _do_query
  db.query(q)
  
  ProgrammingError: (1146, "Table 'securities_master.symbol' doesn't exist")
  </code></pre>
  
  <p>Programming error! Dang! I can't imagine it's fun picking through noobs' errors so thank you very much to anyone who does take the time to help.</p>