title: MySQL and lock a table, read, and then truncate
body: <p>I am using mysqldb in python.</p>
  
  <p>I need to do the following for a table.</p>
  
  <pre><code>1) Lock
  2) Read
  3) Truncate the table
  4) Unlock
  </code></pre>
  
  <p>When I run the below code, I get the below error.  So, I am rather unsure on how to lock a table for reading it, then truncating the table.  I need to be sure that no other connection reads the data.</p>
  
  <pre><code>asin_list = [] 
      conn = MySQLdb.connect(host=parms['database']['operations']['host'],user=parms['database']['operations']['username'],passwd=parms['database']['operations']['password'],db=parms['database']['operations']['database'])
      cursor = conn.cursor()
  
      query = "LOCK TABLES asin_one_time_only READ"
      cursor.execute(query)
      print 'fu1'
  
      query = """select asin FROM asin_one_time_only""" 
      cursor.execute(query)
      rows = cursor.fetchall()
      for row in rows:
          asin_list.append(row[0]) 
  
      print asin_list
      print 'fu2'
      query = "UNLOCK TABLES;"
      cursor.execute(query)
      conn.commit()
  
  
      print 'fu3'
      query = "LOCK TABLES asin_one_time_only WRITE"
      cursor.execute(query)
  
  
      query = """truncate table amz_one_time_only""" 
      cursor.execute(query)
      conn.commit()
  
      print 'fu3'
      query = "UNLOCK TABLES;"
      cursor.execute(query)
      conn.commit()
  
      cursor.close()
      conn.close() 
  
  Traceback (most recent call last):
    File "/home/ubuntu/workspace/Amazon-Products-Crawler-1/threaded_crawl.py", line 1086, in &lt;module&gt;
      onetime = getOneTimeOnlyAsins(parms)
    File "/home/ubuntu/workspace/Amazon-Products-Crawler-1/threaded_crawl.py", line 109, in getOneTimeOnlyAsins
      cursor.execute(query)
    File "/usr/lib/pymodules/python2.7/MySQLdb/cursors.py", line 166, in execute
      self.errorhandler(self, exc, value)
    File "/usr/lib/pymodules/python2.7/MySQLdb/connections.py", line 35, in defaulterrorhandler
      raise errorclass, errorvalue
  _mysql_exceptions.OperationalError: (1192, "Can't execute the given command because you have active locked tables or an active transaction")
  </code></pre>