MySql:20000行记录中只显示5行,为啥?

Posted

技术标签:

【中文标题】MySql:20000行记录中只显示5行,为啥?【英文标题】:MySql: among 20000 rows of records only shows 5, why?MySql:20000行记录中只显示5行,为什么? 【发布时间】:2013-03-03 04:19:24 【问题描述】:

我想测试我的 mysql 数据库以及它如何处理我未来的数据。它只是一个有两列的表,其中一列只有一个单词,另一列是 30.000 个字符。所以我复制并插入同一个表 20.000 次,显示大小为 2.0 GB。现在我想通过 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

【问题讨论】:

Python 我用它来插入和查询。 下次请用python标记你的问题。 但是问题出在MySql上,不是吗? 无法用您提供给我们的信息来判断。例如,您还没有展示如何通过 python 输出数据。 这样的问题可以由有经验的高级人员解决。先进的人知道如何通过任何语言输出这些数据。所以答案是,我尝试通过 python IDLE 和 wx.python 输出。 【参考方案1】:

我不确定我是否理解您的问题,但这里有一些关于您粘贴的代码的提示。

在任何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()

【讨论】:

感谢我使用之前使用的相同方法已经有一段时间了,它可以在失败之前插入 2000 行。但我必须对其进行更多测试以了解它为什么会发生。而且我还测试了 con.commit() ,我相信在更改后让您的表保持稳定是一个好主意。但这只是我的理论,需要更多的测试来做。所以下次我尝试一个非常大的条目,看看会发生什么。但奇怪的是,仅 2000 个条目,我的表就达到了 350 MBit,这让我失去了使用数据库和这些东西的兴趣。

以上是关于MySql:20000行记录中只显示5行,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 MySql 会出现“子查询返回超过 1 行”错误?

mysql只能取出一条记录为啥不显示

mysql怎么指定查询一张表的查询结果,如最后5行记录和最前5行记录

为啥 PHP 5.2.14 不会显示任何错误(即使是从命令行)?

MySQL结构行长度的一些限制

MySQL 偏移无限行