2013-03-03 2 views
0

Я хочу проверить мою базу данных MySQL и как она обрабатывает мои будущие данные. это только таблица с двумя столбцами, один из столбцов - только одно слово, а другое - 30 000 символов. Поэтому я скопировал и вставил в ту же таблицу 20 000 раз, размер которой составляет 2,0 ГБ. Теперь я хочу просмотреть их через phpMyAdmin, он ничего не показывает, и каждый уничтожил эту таблицу, чтобы показать что-нибудь. Я вывожу его через python, он показывает только 5 строк, которые были вставлены перед этой копией. Я использовал скрипт для удаления строк из идентификаторов между 5000 - 10.000, он работает. Это означает, что данные есть, но не выходят. Любое объяснение?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

+0

В следующий раз отметьте свой вопрос с помощью python, пожалуйста. – Daedalus

+0

Но проблема в MySql, не так ли? – jesy2013

ответ

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 Мбит, что потеряло мой аппетит, чтобы использовать базу данных и эти материалы больше. – jesy2013

Смежные вопросы