SQLite Python在行中打印?

时间:2013-02-04 11:53:35

标签: python sqlite

下午,我正在尝试使用以下代码从数据库中检索座位号

        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 个答案:

答案 0 :(得分:1)

使用itertools.groupby() tool

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中的每一行,取第一列的第一个字母,并为每个(letter, rows)值提供一个元组。 rows值是另一个可迭代的值,您可以遍历该值(例如,使用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