如何将几个MySQLdb fetch_all()调用的输出合并到一个列表中?

时间:2012-07-20 02:41:15

标签: python

我有一个处理MySQLdb查询输出的循环:

for item in getItems()
    . . . 

其中getResults()返回cursor.fetchall()的输出。

如何修改getItems(),以便它结合几个不同查询的fetchall()返回?也就是说,一旦第一个查询的结果用尽,我希望循环开始处理第二个查询的结果。

2 个答案:

答案 0 :(得分:1)

我不知道你如何进行查询的细节,但这样的事情应该有效:

[item for query in queries for item in execute(query)]

假设execute返回cursor.fetchall()

答案 1 :(得分:1)

如果两个查询都有类似的列结构,您可以考虑使用MySQL来使用UNION关键字组合这两个SQL查询。

SELECT a, b, c
FROM table_x
UNION
SELECT d,e,f
FROM table_y

否则,将getItems定义为生成器可能更容易。

def getItems():
    cursor.execute(query1)
    for row in cursor.fetchall():
        yield row
    cursor.execute(query2)
    for row in cursor.fetchall():
        yield row

gen = getItems()

for item in gen:
    ...