SQLite Python 按行打印?
下午好,我正在尝试用以下代码从数据库中获取座位号。
cur.execute("SELECT * FROM seats")
while True:
row = cur.fetchone()
if row == None:
break
print row[0]
但是,当我这样做时,它会把每条记录单独打印出来,每行一条,像这样:
A1
A2
B3 etc..
但我希望每一行能用相同的字母打印出来,如果这样说你能理解的话,比如:
A1 A2 A3 A4 A5 A6 A7 A8
B1 B2 B3 B4 B5 B6 B7
但是我似乎无法做到这一点?我该怎么做呢?
1 个回答
2
from itertools import groupby
for letter, rows in groupby(cur, key=lambda r: r[0][0]):
print ' '.join([r[0] for r in rows])
groupby()
这个函数会逐行检查cur
中的每一行,取出第一列的第一个字母,然后给你一个包含每个(字母, 行)
值的元组。这里的行
值是另一个可迭代的对象,你可以用for
循环来遍历它,列出所有以这个字母开头的行。
不过,这个方法需要你的行已经排好序。如果你的行的第一个字母是交替出现的:
A1
A2
B1
B2
A3
A4
它会把这些当作不同的组来打印:
A1 A2
B1 B2
A3 A4
你可能需要在你的查询中添加一个ORDER BY firstcolumnname
的排序指令,以确保分组是正确的。
这是我在创建测试数据库时看到的:
>>> cur.execute("SELECT * FROM seats ORDER BY code")
<sqlite3.Cursor object at 0x10b1a8730>
>>> for letter, rows in groupby(cur, key=lambda r: r[0][0]):
... print ' '.join([r[0] for r in rows])
...
A1 A2 A3 A4 A5 A6 A7 A8
B1 B2 B3 B4 B5 B6 B7 B8
C1 C2 C3 C4 C5 C6 C7 C8