2013-03-03 90 views
0

我想測試我的MySQL數據庫以及它如何處理我未來的數據。它只是一個有兩列的表,其中一列只有一個字,另一列是30.000個字符。因此,我複製並插入同一個表的20.000次,顯示大小爲2.0 GB。現在我想通過phpMyAdmin瀏覽它們,它沒有顯示任何內容,並且每個表格都被銷燬以顯示任何內容。我通過python輸出它,它只顯示5行,在此副本之前插入。我使用腳本從5000到10.000之間的ID中刪除行。這意味着數據在那裏,但不出來。任何解釋?MySql:在20000行記錄中只顯示5個,爲什麼?

import MySQLdb as mdb   
con = mdb.connect('127.0.0.1', 'root','password', 'database') 
title = [] 
entry = [] 
y = 0 
with con:    
    conn = con.cursor() 

    conn.execute("SELECT * FROM mydatabase WHERE id='2' AND myword = 'jungleboy'") 
    rows = conn.fetchall()  
    for i in rows: 
     title.append(i[1]) 
     entry.append(i[2]) 

    for x in range(20000): 
     cur.execute("INSERT INTO mydatabase(myword,explanation) VALUES (%s,%s)",(str(title[0]),str(entry[0]))) 
     if x > y+50: 
      print str(x) 
      y = x 
+0

的Python,我用它到INSERT和QUERY。 – jesy2013 2013-03-03 04:25:36

+0

下一次,請用python標記你的問題。 – Daedalus 2013-03-03 04:26:56

+0

但問題出在MySql上,不是嗎? – jesy2013 2013-03-03 04:28:02

回答

2

我不確定我是否理解你的問題,但這裏有一些你已經粘貼的代碼的提示。

在任何INSERT或其他添加,刪除或更改表中數據的查詢之後,您需要使用con.commit()提交事務。

使用fetchall()可以獲取的記錄數有限制。你可以看到,並通過打印光標arraysize屬性調整此限制:

print 'I can only fetch {0.arraysize} rows at a time.'.format(cur) 

要保證你通過結果獲取每一行,循環,像這樣:

q = "SELECT .... " # some query that returns a lot of results 
conn.execute(q) 
rows = con.fetchone() # or fetchall() 

while rows: 
    print rows 
    rows = con.fetchone() # again, or fetchall() 
+0

謝謝你已經有一段時間了,我正在使用我之前使用過的相同方法,並且在它失敗之前插入2000行。但我必須更多地測試它,看看它爲什麼會發生。並且我還測試了con.commit(),我相信這是一個好主意,在更改後讓你的表保持穩定。但這只是我的理論,需要做更多的測試。所以下次我嘗試一個非常大的條目,看看會發生什麼。但奇怪的是,只有2000年的入口,我的表達到350 MBit,失去了我對使用數據庫和這些東西的胃口。 – jesy2013 2013-03-03 06:06:15