2011-06-28 23 views
10

Tôi có một kết quả của các hàng được lưu trữ trong cursor.rows được trả về từ lệnh pyodbc.cursor.execute. Cách nhanh nhất để giải nén dữ liệu này và đặt nó vào danh sách các chuỗi được phân cách bằng dấu phẩy (hoặc giải nén vào một đối tượng tùy chỉnh) là gì?Bạn sẽ tạo chuỗi được phân cách bằng dấu phẩy từ hàng kết quả bằng pyodbc như thế nào?

Hiện nay tôi đang làm như sau:

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') 

này có 130ms cho mỗi hàng, mà có vẻ giống như một hoạt động ridiculously đắt tiền. Làm thế nào tôi có thể tăng tốc độ này?

+1

130ms mỗi hàng có vẻ rẻ đối với tôi. Đâu là thời gian được chi tiêu? Cơ sở dữ liệu? Mạng? Hệ điều hành? Dòng thời gian được nêu trong yêu cầu của bạn là gì? –

+0

Các truy vấn được trả về có khoảng 6000 hồ sơ. Viết chúng vào một tập tin mất khoảng 5-6 phút trên Win XP, máy trạm dell mô hình muộn (T5500) vì vậy nó không phải là một giới hạn bộ vi xử lý. thời gian đang được sử dụng trong phép nối ([str (s) cho s trong hàng]), nó gọi hàm str cho tất cả các phần tử trong bản ghi. Tôi cũng đã cố gắng giới hạn số lượng cột được trả lại, giảm chúng xuống còn khoảng 15 từ 25, điều này thực sự hơi chậm hơn. – DonQuixote

+0

Nếu ít cột chậm hơn, thì bạn phải nghiên cứu các kiểu dữ liệu của mỗi cột riêng lẻ. Tất cả phải mất là một cột BLOB lớn để mất tất cả thời gian và thực hiện điều này rất, rất chậm. Hãy tiếp tục thu thập dữ liệu trước khi lãng phí thời gian của bạn vào "tối ưu hóa". Vui lòng ** cập nhật ** câu hỏi với các phát hiện của bạn. Vui lòng tránh nhận xét về câu hỏi của riêng bạn. Vui lòng cập nhật nó với ** tất cả ** sự thật. –

Trả lời

11

Tôi muốn sử dụng các mô-đun csv:

import csv 

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

Ghi chú rằng nếu bạn csv.QUOTE_NONE một csv.Error được nâng lên nếu có một dấu phẩy trong một trường dữ liệu. Cách lành mạnh nhất sẽ là csv.QUOTE_MINIMAL ít nhất.

+0

+1. Nó cũng sẽ [giúp đặt 'quotechar' thành một chuỗi rỗng] (http://stackoverflow.com/a/23296450/753731) – iruvar

Các vấn đề liên quan