2012-03-12 100 views
2

光標= conn.cursor()
cursor.execute(查詢)
返回光標

,並試圖將它們打印爲

sql = 'select * from reading table;' # has 7 million records 
cursor = MySQLDB.execute(sql) 
for row in cursor: 
     print row 
  • 它一直無法進行打印

在服務器上,我看到正在運行的進程

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND                                                                          
3769 mysql  20 0 1120m 276m 5856 S 125 1.7 2218:09 mysqld  

問題 使用python查詢包含{m,b}個記錄的表的有效方式是什麼?

謝謝

+1

什麼是你的sql查詢('sql'變量的內容)? – 2012-03-12 21:17:06

+0

您是否嘗試過不打印任何內容以檢查是否不增加其他瓶頸? – danielkza 2012-03-12 21:17:34

+2

什麼時候一次印刷7百萬條記錄被認爲是有效的? – animuson 2012-03-12 21:37:36

回答

5

我建議兩個選項:

  1. 直接需要的數據到一個文件,SELECT OUTFILE,甚至與一個MySQL控制檯,並用文件的工作。

  2. 您應該明白,默認情況下,mysql會將整個結果集發送到客戶端,並且客戶端模仿數據逐行讀取(儘管整個結果已經存儲在內存中,或者如果沒有足夠的記憶)。另外,結果集可以在服務器端形成。爲此,您需要將cursor=MySQLdb.cursors.SSCursor參數添加到MySQLdb.connect(有關詳細信息,請參閱http://mysql-python.sourceforge.net/MySQLdb.html)。

+0

您還可以通過將'MySQLdb.cursors.SSCursor'傳遞給連接對象的'cursor()'方法來獲得'SSCursor'。 – Dikei 2012-03-13 04:39:06

相關問題