2017-11-17 8 views
0

内のレコードリストから、ジェネレータオブジェクトを作成するので、私は、パラメータとして関数にMySQLのカーソルオブジェクトを渡しています。含む歩留まりレコードその後、コメントcust_recordsされる「ブロックがあれば、」機能が完全に正常に動作しますが、私は行のコメントを外した場合、その後の機能が動作しない場合は、ここで私はmysqlデータベースからのデータのレコードのリストについては、ジェネレータオブジェクトを作成しようとしている機能

私の問題があります。これはPythonで、これまでに3

私のコードをリストオブジェクトを生成する方法ではない場合

わからない:

def cust_records(result_set) : 

    block_id = None 
    records = [] 
    i = 0 
    for row in result_set : 
     records.append((row['id'], row, smaller_ids)) 

    if records : 
     yield records 
+0

あなたは 'リストオブジェクトfrom'リストオブジェクトや'歩留まりをyield'しますか? –

+0

最後の行の歩留まりレコードがコメントされている場合 - あなたは「ハング」体のない状態iがmin2bro @リストオブジェクト – alfasin

+0

@mosesはなぜ 'yield'を使用している場合、すべてを持っていますので、何も動作しないはずです、そして?常に*単一の要素を持つジェネレータ*であり、リストを '返す 'だけではないのですか? – min2bro

答えて

3

発電機のポイントはそれほど内のすべてのレコードを格納遅延評価であり、リストを生成し、リストを生成することはまったく意味がありません。他

def cust_records(result_set) : 
    for row in result_set : 
     yield (row['id'], row, smaller_ids) 


# then 
def example(): 
    cursor.execute(<your_sql_query_here>)  
    for record in cust_records(cursor): 
     print(record) 

(もしあれば本当に:あなたは(あなたが巨大得る可能性があります任意のデータセットで作業する必要がある特別な場合には、私見望ましい)怠惰evalutionを保持したい場合は、すなわち、各レコードを得たいですはちょうど男性cust_recordプレーン機能)できるだけ多くのメモリを消費します:

def cust_records(result_set) : 
    records = [] 
    for row in result_set : 
     records.append((row['id'], row, smaller_ids)) 
    return records 
関連する問題