2012-07-20 2 views
0

는 I는 MySQLdb 쿼리의 출력을 처리하는 루프를 가지고 getResults()가 cursor.fetchall의 출력을 반환여러 MySQLdb fetch_all() 호출의 출력을 하나의 목록으로 결합하는 방법은 무엇입니까?

for item in getItems() 
    . . . 

().

몇 가지 다른 쿼리의 fetchall() 반환 값을 결합하도록 getItems()를 어떻게 수정할 수 있습니까? 즉, 첫 번째 쿼리의 결과가 고갈되면 두 번째 쿼리의 결과에서 루프가 시작되기를 원합니다.

답변

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: 
    ... 
+0

후자는 제가 찾고있는 것입니다. 파이썬이 결과를 얻고 결합하는 몇 가지 방법입니다. 고마워. – chernevik

1

난 당신이 쿼리를 어떻게 세부 사항에 대해 잘 모르는 것 같아요,하지만이 같은 작업을해야합니다 : execute이 가정

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

cursor.fetchall()를 반환 할 수 있습니다.

+0

이것은 작동합니다. 감사. – chernevik

관련 문제