我正在使用PrettyTable'from_db_cursor'模块来很好地打印我从sql请求中获得的响应。一切正常,我唯一的问题是,对于我想要打印表格的一些查询,它们会连接到同一行,如下所示:
countUnivers1: countUnivers2: countUnivers3:
+----------+ +----------+ +----------+
| COUNT(*) | | COUNT(*) | | COUNT(*) |
+----------+ +----------+ +----------+
| 1681943 | | 51954 | | 4140984 |
+----------+ +----------+ +----------+
但是我无法找到如何做到这一点,这里是他现在使用的代码:
i = 0
tables = []
with open(output, 'w+') as file:
file.write(str(current_time) + '\n')
for query in QUERIES.items():
cur.execute(query[1])
table = from_db_cursor(cur)
if not re.search('countUnivers' ,query[0]):
file.write('\n' + query[0] + ':\n')
file.write(str(table) + '\n')
else:
if i < 6:
file.write(query[0] + ':\t')
tables.append(str(table))
i += 1
elif i == 6:
file.write('\n')
for t in tables:
file.write(str(table) + '\t')
i = 0
tables = []
file.write('\nDatabase:\n' + json.dumps(dbParams, indent=4) + '\n')
此代码输出我:
countUnivers1: countUnivers2: countUnivers3:
+----------+
| COUNT(*) |
+----------+
| 1681943 |
+----------+ +----------+
| COUNT(*) |
+----------+
| 51954 |
+----------+ +----------+
| COUNT(*) |
+----------+
| 4140984 |
+----------+
QUERIES这里是一个充满SQL请求的OrderedDict:
('countUnivers1', "SELECT COUNT(*) \
FROM ourson_offer o \
WHERE o.cat LIKE '1%' \
AND CHARACTER_LENGTH(o.cat) = 7"),
像这样。
答案 0 :(得分:1)
文字是二维的:行内的行+字符。 A&#34;表&#34;是一个python字符串,其中包含新行 - 它是一个文本!在每个行尾字符(CRLF,CR或LF取决于操作系统/平台)之后启动新行。
您想要做的是要求将字符串的结构理解为文本并垂直对齐新块。
def pad_lines_vertically(lines, size):
''' List of lines of exactly `size` length.
Extended with empty lines if needed.
'''
orig_lines = list(lines)
assert size >= len(orig_lines)
return orig_lines + [''] * (size - len(orig_lines))
def pad_lines_horizontally(lines):
''' Pad lines to the lenght of the longest line.
'''
line_length = max(len(line) for line in lines)
return [
line.ljust(line_length)
for line in lines
]
def text_add(text1, text2, padding=' '):
lines1 = text1.splitlines()
lines2 = text2.splitlines()
line_count = max(len(lines1), len(lines2))
def pad_lines(lines):
return pad_lines_horizontally(
pad_lines_vertically(lines, line_count)
)
return '\n'.join(
''.join(line1 + padding + line2)
for line1, line2 in zip(pad_lines(lines1), pad_lines(lines2))
)
像这样使用:
text1 = '''\
countUnivers1:
+----------+
| COUNT(*) |
+-------
| 1681943 |
+----------+
'''
text2 = '''\
countUnivers2:
+----------+
| COUNT(*) |
+----------+
| 51954 |
+----------+
plus a
comment
'''
print text_add(text1, text2, padding='\t')
countUnivers1: countUnivers2:
+----------+ +----------+
| COUNT(*) | | COUNT(*) |
+------- +----------+
| 1681943 | | 51954 |
+----------+ +----------+
plus a
comment