title: Print results in MySQL format with Python
body: <p>What is the easiest way to print the result from MySQL query in the same way MySQL print them in the console using Python? For example I would like to get something like that:</p>
  
  <pre><code>+---------------------+-----------+---------+
  | font                | documents | domains |
  +---------------------+-----------+---------+
  | arial               |     99854 |    5741 |
  | georgia             |     52388 |    1955 |
  | verdana             |     43219 |    2388 |
  | helvetica neue      |     22179 |    1019 |
  | helvetica           |     16753 |    1036 |
  | lucida grande       |     15431 |     641 |
  | tahoma              |     10038 |     594 |
  | trebuchet ms        |      8868 |     417 |
  | palatino            |      5794 |     177 |
  | lucida sans unicode |      3525 |     116 |
  | sans-serif          |      2947 |     216 |
  | times new roman     |      2554 |     161 |
  | proxima-nova        |      2076 |      36 |
  | droid sans          |      1773 |      78 |
  | calibri             |      1735 |      64 |
  | open sans           |      1479 |      60 |
  | segoe ui            |      1273 |      57 |
  +---------------------+-----------+---------+
  17 rows in set (19.43 sec)
  </code></pre>
  
  <p>Notice: I don't know the max width for each column a priori, and yet I would like to be able to that without going over the table twice. Should I add to the query length() for each column? How does MySQL do it, in order to not impact severely the memory or processing time? </p>
  
  <p><em>EDIT</em></p>
  
  <p>I did not think it was relevant to the question but, this is the query I send:</p>
  
  <pre><code>SELECT font.font as font,count(textfont.textid) as documents, count(DISTINCT td.domain) as domains
  FROM textfont 
  RIGHT JOIN font
  ON textfont.fontid = font.fontid
  RIGHT JOIN (
          SELECT text.text as text,url.domain as domain, text.textid as textid 
          FROM text 
          RIGHT JOIN url 
          ON text.texturl = url.urlid) as td 
  ON textfont.textid = td.textid
  WHERE textfont.fontpriority &lt;= 0 
  AND textfont.textlen &gt; 100
  GROUP BY font.font 
  HAVING documents &gt;= 1000 AND domains &gt;= 10
  ORDER BY 2 DESC;
  </code></pre>
  
  <p>And this is the python code I use:</p>
  
  <pre><code>import MySQLdb as mdb
  
  print "%s\t\t\t%s\t\t%s" % ("font","documents","domains")
  res = cur.execute(query , (font_priority,text_len,min_texts,min_domains))
  for res in cur.fetchall():
      print "%s\t\t\t%d\t\t%d" % (res[0],res[1],res[2])
  </code></pre>
  
  <p>But this code produces a messy output due to different widths.</p>