0

MySQLデータベースと、それが将来のデータをどのように処理するかをテストしたいと思います。これは2列のテーブルのみで、1列は1ワード、もう1列は30.000文字です。そこで、同じテーブルに20.000回コピーして挿入したところ、サイズは2.0GBでした。今、私はphpMyAdminを介してそれらを閲覧したいのですが、何も表示されず、すべてがそのテーブルを破棄して何かを表示します。Pythonを介して出力すると、このコピーの前に挿入された5行のみが表示されます。スクリプトを使用して、5000〜10.000のIDから行を削除しました。つまり、データはありますが、出てこないということです。説明はありますか?

    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
4

1 に答える 1

3

あなたの質問を理解できるかどうかはわかりませんが、貼り付けたコードに関するヒントをいくつか紹介します。

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()
于 2013-03-03T05:14:14.303 に答える