使用Python以MySQL格式打印结果

与MySQL使用Python在控制台中打印结果一样,最简单的打印MySQL查询结果的方法是什么?例如,我想得到类似的东西:

+---------------------+-----------+---------+

| 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)

注意:我不知道每列的最大宽度是先验的,但是我希望能够不重复两次就可以做到这一点。是否应为每列添加查询的length()?MySQL如何做到这一点,以免严重影响内存或处理时间?

编辑

我认为这与问题无关,但这是我发送的查询:

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 <= 0

AND textfont.textlen > 100

GROUP BY font.font

HAVING documents >= 1000 AND domains >= 10

ORDER BY 2 DESC;

这是我使用的python代码:

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])

但是此代码由于宽度不同而产生混乱的输出。

回答:

采用 prettytable

x = PrettyTable(["City name", "Area", "Population", "Annual Rainfall"])

x.set_field_align("City name", "l") # Left align city names

x.set_padding_width(1) # One space between column edges and contents (default)

x.add_row(["Adelaide",1295, 1158259, 600.5])

x.add_row(["Brisbane",5905, 1857594, 1146.4])

x.add_row(["Darwin", 112, 120900, 1714.7])

x.add_row(["Hobart", 1357, 205556, 619.5])

x.add_row(["Sydney", 2058, 4336374, 1214.8])

x.add_row(["Melbourne", 1566, 3806092, 646.9])

x.add_row(["Perth", 5386, 1554769, 869.4])

print x

+-----------+------+------------+-----------------+

| City name | Area | Population | Annual Rainfall |

+-----------+------+------------+-----------------+

| Adelaide | 1295 | 1158259 | 600.5 |

| Brisbane | 5905 | 1857594 | 1146.4 |

| Darwin | 112 | 120900 | 1714.7 |

| Hobart | 1357 | 205556 | 619.5 |

| Sydney | 2058 | 4336374 | 1214.8 |

| Melbourne | 1566 | 3806092 | 646.9 |

| Perth | 5386 | 1554769 | 869.4 |

+-----------+------+------------+-----------------+

以上是 使用Python以MySQL格式打印结果 的全部内容, 来源链接: utcz.com/qa/414343.html

回到顶部