gpt4 book ai didi

python - MySQLdb Python 防止重复和优化多个插入

转载 作者:行者123 更新时间:2023-11-29 02:31:07 26 4
gpt4 key购买 nike

我写了这个 python 脚本来将特定的 xls 文件导入 mysql。它工作正常,但如果它在同一数据上运行两次,它将创建重复的条目。我很确定我需要使用 MySQL JOIN 但我不清楚如何执行此操作。 executemany() 的开销是否与在循环中执行插入操作的开销相同?我显然在努力避免这种情况。
这是有问题的代码...

for row in range(sheet.nrows):
"""name is in the 0th col. email is the 4th col."""
name = sheet.cell(row, 0).value
email = sheet.cell(row, 4).value
if name and email:
mailing_list[name.lstrip()] = email.strip()

for n, e in sorted(mailing_list.iteritems()):
rows.append((n, e))

db = MySQLdb.connect(host=host, user=user, db=dbname, passwd=pwd)
cursor = db.cursor()
cursor.executemany("""
INSERT IGNORE INTO mailing_list (name, email) VALUES (%s,%s)""",(rows))

澄清...

我读了here那...

To be sure, executemany() is effectively the same as simple iteration. However, it is typically faster. It provides an optimized means of affecting INSERT and REPLACE across multiple rows.

我还采纳了 Unode 的建议并使用了 UNIQUE 约束。但是 IGNORE 关键字比 ON DUPLICATE KEY UPDATE 更好,因为我希望它静默失败。

长话短说

<罢工>1。防止重复插入的最佳方法是什么?
答案 1:SELECT IGNORE 列上的 UNIQUE 约束会静默失败,或者 ON DUPLICATE KEY UPDATE 会增加重复值并将其插入。

  1. executemany() 是否与循环中的 INSERT 一样昂贵?
    @Unode 说不是,但我的研究告诉我并非如此。我想要一个明确的答案。
  2. 这是最好的方法吗?还是说它会变得非常慢?表格以及我将如何测试才能确定?

最佳答案

1 - 防止重复插入的最佳方法是什么?

根据“预防”在您的情况下的含义,您有两种策略和一种要求。

要求是你添加一个UNIQUE对您希望唯一的列的约束。如果尝试插入重复条目,仅此一项就会导致错误。但是,鉴于您使用的是 executemany结果可能不是您所期望的。

然后作为你可以做的策略:

  • 运行 SELECT 的初始过滤步骤声明之前。这意味着对行中的每个项目运行一个 SELECT 语句来检查它是否已经存在。这种策略有效但效率低下。

  • 使用 ON DUPLICATE KEY UPDATE .如果数据已经存在,这会自动触发更新。有关详细信息,请参阅 the official documentation .

2 - executemany() 是否与循环中的 INSERT 一样昂贵?

不,executemany创建 one 查询,在执行 for 循环时批量插入将创建与 rows 中的元素数量一样多的查询.

关于python - MySQLdb Python 防止重复和优化多个插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13030126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com