【发布时间】:2016-07-15 13:02:42
【问题描述】:
我有一个包含 2,760,000 行的表格。在 mysqlworkbench 中,从原始表中选择 * 需要 36 秒。
我想在 python 中使用这个现有的表创建另一个表(使用 my_func() 来转换值)。
但是,当我在命令行中运行它时,它似乎永远不会完成。
sql = "SELECT ID, Eye, Values FROM my_original_table"
curQuery.execute(sql)
for row in curQuery.fetchall():
dat = list(row)
id = dat.pop(0)
eye = dat.pop(0)
values = dat.pop(0)
v = my_func(values)
if v != None :
sql = "INSERT INTO new_table VALUES ( '%s', '%s', %d );" % (id, eye, v)
print(sql)
curExe.execute(sql)
db.commit()
但是,如果我将 LIMIT 0,10 添加到我的第一个选择 sql(如下所示),它运行良好。所以,这意味着我的程序是正确的。但这是否意味着没有“限制”,我的计算机无法处理的数据太多了?我该如何解决这个问题?
sql = "SELECT ID, Eye, Values FROM ETCEpisodeVisualAcuity LIMIT 0,10"
【问题讨论】:
-
顺便说一句,从不使用字符串格式构造 SQL;使用参数化查询。 (在许多 Python SQL 库中,您可以通过删除查询中 %s 周围的单引号并将最后一个 % 替换为逗号来解决此问题)
-
270 万行听起来并不那么很多,对吧?
-
顺便说一句,如果您在
new_table中有索引,它会在 每个 插入后重建。这需要时间。
标签: python mysql bigdata database