2011-06-28 13 views
10

pyodbc.cursor.executeコマンドから返されるcursor.rowsに格納された行の結果セットがあります。このデータを解凍してコンマで区切った文字列のリストに入れる(またはカスタムオブジェクトに展開する)方法は何ですか?pyodbcの結果行からコンマ区切り文字列を作成するにはどうすればよいですか?

は現在、私は次のことをやっている:

cursor.execute(query_str) 
f = open(out_file, 'w') 
for row in cursor: 
    f.write(','.join([str(s) for s in row])) 
    f.write('\n') 

これは途方もなく高価な操作のように思える行当たり130msのを取ります。どうすればこれをスピードアップできますか?

+1

1行あたり130msが安いようです。時間はどこに費やされていますか?データベース?ネットワーク? OS?要件に記載されているタイムラインは何ですか? –

+0

返されるクエリには、およそ6000のレコードがあります。それをファイルに書き込むことは、Windows XP、旧モデルのdellワークステーション(T5500)で約5-6分かかるので、プロセッサの制限ではありません。結合([str(s)for in row])で時間が費やされているので、レコード内のすべての要素のstr関数を呼び出しています。私はまた、返される列の量を制限しようと試みました.25から約15に減らしました。これは実際には少し遅いです。 – DonQuixote

+0

列の数が減ると、個々の列のデータ型を調べる必要があります。すべての時間を取ってこれを非常に遅くするためには、1つの巨大なBLOBカラムが必要です。 「最適化」に時間を費やす前にデータを収集してください。 **あなたの調査結果を**更新**してください。あなた自身の質問にコメントするのは避けてください。 **すべての**事実を更新してください。 –

答えて

11

私はcsvモジュールを使用したい:

import csv 

cursor.execute(query_str) 
with open(out_file, 'w') as f: 
    csv.writer(f, quoting=csv.QUOTE_NONE).writerows(cursor) 

は、データフィールドにカンマがある場合、あなたcsv.QUOTE_NONEcsv.Errorが発生した場合ことに注意してください。平凡な方法は、少なくともcsv.QUOTE_MINIMALになります。

+0

+1。また、[空の文字列に 'quotechar'を設定するのに役立ちます](http://stackoverflow.com/a/23296450/753731) – iruvar

関連する問題