使用Python避免循环更新MySQL表中的数据最有效的方法是什么?

2024-06-16 12:31:31 发布

您现在位置:Python中文网/ 问答频道 /正文

格式化数据的最佳方式是什么?在

背景如下:

我使用nameparser来解析一个名称,这是可能的最佳方式。我构建了一个包装器,它调用nameparser,然后将解析后的名称存储在数据库(MySQL)中。在

在这种情况下,什么是最有效的方法?以下是我的方法。在

  1. 步骤1:调用nameparser(提供tablename,id,name,first, 中间、结尾、后缀)。在
  2. 步骤(2)中返回的名称 内存中这种形式的dict(我正在分析相对较小的名称) 设定-说出20000个名字)。{id:{'first':'John', 'middle':'V', 'last':'Doe', 'suffix':''}
  3. MySQL的第3步:dict存储 包含一个查询的表?(不确定数据是否可行 步骤2中描述的结构。在

这是我的代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from nameparser import HumanName

import time

cursor = db.cursor()


def name(table, id, name, first, middle, last, suffix):

    cursor.execute('SELECT `' + id + '`,`' + name + '` FROM `' + table
                   + '` WHERE `' + name + '` IS NOT NULL AND ' + id
                   + ' IS NOT NULL')

    numrows = int(cursor.rowcount)
    namelist = []
    namelist = cursor.fetchall()

    for record in namelist:
        parsed = HumanName(record[1])
        parsed.capitalize()
        mydict[int(record[0])] = {
            'first': str(parsed.first),
            'middle': str(parsed.middle),
            'last': str(parsed.last),
            'suffix': str(parsed.suffix),
            }   

mydict = {}

starttime = time.time()

split = name('NamesToParse','id','name','first','middle','last','suffix')
print mydict
print time.time() - starttime

请建议在MySQL表中存储数据的最佳方式。这就是我目前所拥有的,我仍然需要循环查看每个记录。我想知道是否有一种方法可以update现有表,而不是先创建临时表,然后一次性更新原始表?希望我说得通。在

^{pr2}$

Tags: 数据name名称idmiddletime方式mysql
1条回答
网友
1楼 · 发布于 2024-06-16 12:31:31

看起来我将采用元组列表方法,首先在临时表中插入,然后用原始表更新它们。节省的时间是惊人的。我觉得字典对这项任务来说太过分了。在

mylistoftuples.append((int(record[0]), str(parsed.first),str(parsed.middle),str(parsed.last),str(parsed.suffix)))

cursor.executemany("""insert into NamesToParseOut(id, first, middle, last, suffix) values (%s, %s, %s, %s, %s)""", mylistoftuples)

相关问题 更多 >