已有代码# 导入数据 for index, row in data.iterrows(): sql = "INSERT IGNORE INTO job_list VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')ON DUPLICATE KEY UPDATE company_name = company_name" % ( row['职位名称'], row['地区'], row['能力要求'], row['公司名字'], row['福利待遇'], row['详情链接'], row['工作经验'], row['学历'], row['最低薪资(K)'], row['最高薪资(K)'], row['薪期']) cursor.execute(sql) # 提交更改并关闭连接 conn.commit() cursor.close() conn.close()怎么同时进行去重
时间: 2023-08-08 20:06:54 浏览: 74
可以使用 MySQL 中的 `INSERT...ON DUPLICATE KEY UPDATE` 语句来进行去重操作。这个语句的作用是如果插入的数据已经存在于表中,则执行更新操作,否则执行插入操作。
在你的代码中已经使用了这个语句,只需要将 `IGNORE` 关键字移除,并将更新操作改为不做任何操作即可。修改后的代码如下:
```python
# 导入数据
for index, row in data.iterrows():
sql = "INSERT INTO job_list VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s') ON DUPLICATE KEY UPDATE company_name = company_name" % (
row['职位名称'], row['地区'], row['能力要求'], row['公司名字'], row['福利待遇'], row['详情链接'], row['工作经验'], row['学历'],
row['最低薪资(K)'],
row['最高薪资(K)'], row['薪期'])
cursor.execute(sql)
# 提交更改并关闭连接
conn.commit()
cursor.close()
conn.close()
```
这样就可以同时进行插入和去重操作了。
相关问题
# 导入数据 for index, row in data.iterrows(): sql = "INSERT IGNORE INTO job_list VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')ON DUPLICATE KEY UPDATE company_name = company_name AND job_title = job_title" % ( row['职位名称'], row['地区'], row['能力要求'], row['公司名字'], row['福利待遇'], row['详情链接'], row['工作经验'], row['学历'], row['最低薪资(K)'], row['最高薪资(K)'], row['薪期']) cursor.execute(sql) # 提交更改并关闭连接 conn.commit() cursor.close() conn.close()执行后数据库中存在重复数据
根据你提供的代码,我发现在 SQL 语句中使用了 "INSERT IGNORE INTO",这个命令会尝试插入新数据,如果数据已经存在就会忽略插入操作,而不会更新数据。因此,如果你要更新已经存在的数据,可以改用 "INSERT INTO ... ON DUPLICATE KEY UPDATE" 语句。同时,你的 SQL 语句中的 "AND" 连接符有问题,应该使用逗号 "," 来分隔每个字段的赋值操作。
你可以将代码修改为以下形式:
```
for index, row in data.iterrows():
sql = "INSERT INTO job_list (job_title, area, requirements, company_name, welfare, link, experience, education, min_salary, max_salary, salary_period) VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s') ON DUPLICATE KEY UPDATE company_name = VALUES(company_name), job_title = VALUES(job_title)" % (
row['职位名称'], row['地区'], row['能力要求'], row['公司名字'], row['福利待遇'], row['详情链接'], row['工作经验'], row['学历'],
row['最低薪资(K)'], row['最高薪资(K)'], row['薪期'])
cursor.execute(sql)
# 提交更改并关闭连接
conn.commit()
cursor.close()
conn.close()
```
这样的话,如果数据表中已经存在相同的数据,就会更新该记录中的 company_name 和 job_title 字段。
阅读全文