MySQLdbクエリの出力を処理するループがあります。
for item in getItems()
. . .
ここで、getResults()はcursor.fetchall()の出力を返します。
getItems()を変更して、いくつかの異なるクエリのfetchall()リターンを組み合わせるにはどうすればよいですか?つまり、最初のクエリの結果が使い果たされたら、ループが2番目のクエリの結果の処理を開始するようにします。
MySQLdbクエリの出力を処理するループがあります。
for item in getItems()
. . .
ここで、getResults()はcursor.fetchall()の出力を返します。
getItems()を変更して、いくつかの異なるクエリのfetchall()リターンを組み合わせるにはどうすればよいですか?つまり、最初のクエリの結果が使い果たされたら、ループが2番目のクエリの結果の処理を開始するようにします。
両方のクエリの列構造が類似している場合は、MySQLを使用して、UNIONキーワードを使用して2つの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:
...
クエリの実行方法の詳細についてはわかりませんが、次のように機能するはずです。
[item for query in queries for item in execute(query)]
ここで、execute
はを返すと想定されcursor.fetchall()
ます。