gpt4 book ai didi

python - 使用 Python 以 MySQL 格式打印结果

转载 作者:IT王子 更新时间:2023-10-28 23:45:19 24 4
gpt4 key购买 nike

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

注意:我不知道每列的最大宽度是先验的,但我希望能够做到这一点而无需翻阅表格两次。我应该为每列添加查询长度()吗? 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])

但是由于宽度不同,这段代码会产生困惑的输出。

最佳答案

不需要外部库。打印出带有列名的数据。如果不需要列名,可以删除所有带有“列”变量的行。

sql = "SELECT * FROM someTable"
cursor.execute(sql)
conn.commit()
results = cursor.fetchall()

widths = []
columns = []
tavnit = '|'
separator = '+'

for cd in cursor.description:
widths.append(max(cd[2], len(cd[0])))
columns.append(cd[0])

for w in widths:
tavnit += " %-"+"%ss |" % (w,)
separator += '-'*w + '--+'

print(separator)
print(tavnit % tuple(columns))
print(separator)
for row in results:
print(tavnit % row)
print(separator)

这是输出:

+--------+---------+---------------+------------+------------+
| ip_log | user_id | type_id | ip_address | time_stamp |
+--------+---------+---------------+------------+------------+
| 227 | 1 | session_login | 10.0.0.2 | 1358760386 |
| 140 | 1 | session_login | 10.0.0.2 | 1358321825 |
| 98 | 1 | session_login | 10.0.0.2 | 1358157588 |
+--------+---------+---------------+------------+------------+

神奇之处在于每个 cursor.description 行的第三列(在代码中称为 cd[2])。此列表示最长值的字符长度。因此,我们将显示列的大小设置为该列与列标题本身的长度 (max(cd[2], len(cd[0]))) 之间的较大值。

关于python - 使用 Python 以 MySQL 格式打印结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10865483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com