首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python MySQLdb更新值慢

问Python MySQLdb更新值慢
EN

Stack Overflow用户
提问于 2012-06-14 01:11:29
回答 1查看 2.4K关注 0票数 5

我试图用csv文件中的值更新数据库,下面是我的代码:

代码语言:javascript
复制
import MySQLdb as mdb
import sys
import csv

con = None
command = ''
new_name_list = []
old_name_list = []
duplicates = []
update_list = []
file = 'csv_file.csv'
listReader = csv.reader(open(file, 'r'))
for row in listReader:
    new_name_list.append(row)

try:

    con = mdb.connect('localhost', 'root', 'mypassword', 'mydb')
    con.autocommit(True)

    cur = con.cursor()
    cur.execute("SELECT fil_name FROM file WHERE fil_name like 'boy%' and fil_job_id=1")    

    numrows = int(cur.rowcount)

    for i in range(numrows):
        file_name = cur.fetchone()
    old_name_list.append(file_name[0])

    d = dict(new_name_list)

    for n in old_name_list:
        try:
            print n + " has been updated to " +  d[n]
            command = "UPDATE file SET fil_name='" + d[n] + "' WHERE fil_name='" + n + "'"
            cur.execute(command)
        except KeyError:
            duplicates.append(n)

except mdb.Error, e:

    print "Error %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)

finally:    

    if con:    
        con.close()

每次打印大约需要2-3秒,这使我认为更新执行是缓慢的。我有很多值要更新,这不应该是它应该执行的速度(考虑到我能够快速打印出d[n]的所有值)

还有加速更新的地方吗?

编辑:数据库正在使用InnoDB引擎

EN

回答 1

Stack Overflow用户

发布于 2012-06-14 01:20:56

您可以尝试使用executemany

代码语言:javascript
复制
data = [(n, d[n]) for n in old_name_list]
cur.executemany("UPDATE file SET fil_name='%s'  WHERE fil_name='%s'", data)

此外,您可能需要考虑索引fil_name (假设fil_name是读的-主要是)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11025475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档