当前位置: 首页 > 面试题库 >

使用Python以MySQL格式打印结果

闻人思聪
2023-03-14
问题内容

与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      |
+-----------+------+------------+-----------------+


 类似资料:
  • 使用飞碟以PDF格式打印图像。 超文本标记语言代码: 当我使用飞碟将HTML转换为PDF时。生成的PDF不会打印图像。 我需要使用任何特定的软件包来打印PDF格式的图像吗。如果你有任何问题,请告诉我。

  • 问题内容: 这是我的代码: 打印:这正是我想要的。 但是,我有一个列表要附加到该列表上,然后突然所有内容都变得“异常”。这是代码: 打印以下内容: 我怎样才能得到一个简单的? 问题答案: 为什么:日期是对象 在Python中,日期是对象。因此,当你操作它们时,你将操作对象,而不是字符串,时间戳或其他任何对象。 Python中的任何对象都有两个字符串表示形式: 可以使用函数获取“打印”所使用的常规表

  • 问题内容: 我需要将浮点数格式化为+ -00.00的格式,尝试了基本的字符串格式,但是如果值是小数,则无法获取前导+或-符号或两个前导0,是否有指针? 问题答案: 用于适当地设置宽度和精度。使用新样式格式字符串的等效项是(或者,如果您的Python版本需要位置组件)。

  • 问题内容: 我正在尝试使用python将数字打印成工程格式,但似乎无法正常工作。SEEMS语法很简单,但是却行不通。 我不知道为什么会这样。这两个值不相等(一个是字符串,另一个是int)。设置各种上下文似乎也无济于事。有任何线索或想法吗? 问题答案: 为了使它起作用,您必须先对小数进行归一化: 可以通过深入研究源代码来发现其原因。 如果您检查在Python 2.7.3源代码树(从gzip压缩的源焦

  • 我正在使用飞碟将超文本标记语言转换为PDF。我想在我的超文本标记语言中使用像CheckBox这样的超文本标记语言输入属性,并将其打印在生成的PDF中。但是当我用html编写复选框代码并生成PDF时,没有用PDF打印的复选框。 套餐: 我需要使用任何特定的包来打印PDF中的复选框吗。如果你有任何问题,请告诉我。任何帮助都将不胜感激。非常感谢。

  • 问题内容: 所以,我有这个问题。我得到了元组(1,2,3),应该使用字符串格式进行打印。例如。 这应该打印带有括号的元组表示形式,例如 这是一个元组(1,2,3) 但是我得到了。 我到底该怎么做?Kinda在这里输了,所以如果你们能指出我正确的方向:) 问题答案: 以目标元组为唯一项(即零件)来制作单例元组是这里的关键。