首页 > 解决方案 > 如何使用 Python 删除 SQL Server 中的重复记录?

问题描述

我有一个.csv文件,每天都会更新。下面是我的.csv文件示例

在此处输入图像描述

我正在.csv使用 Python 将此文件推送到 SQL Server 中。我的脚本读取.csv文件并将其上传到 SQL Server 数据库。

这是我的 Python 脚本:

import pandas as pd
import pyodbc

df = pd.read_csv ("C:/Users/Dhilip/Downloads/test.csv")

print(df)

conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=DESKTOP-7FCK7FG;'
                      'Database=test;'
                      'Trusted_Connection=yes;')
cursor = conn.cursor()

#cursor.execute('CREATE TABLE people_info (Name nvarchar(50), Country nvarchar(50), Age int)')

for row in df.itertuples():
    cursor.execute('''
                INSERT INTO test.dbo.people_info (Name, Country, Age)
                VALUES (?,?,?)
                ''',
                row.Name, 
                row.Country,
                row.Age
                )
conn.commit()

该脚本工作正常。我正在尝试使用批处理文件和任务调度程序自动化我的 Python 脚本,它工作正常。但是,每当我在.csv文件中添加新数据时,SQL Server 都会使用新数据进行更新,同时它会多次打印旧数据。

例如,如果我添加名为 Israel 的新记录,则 SQL Server 中的输出如下所示

在此处输入图像描述

我需要如下输出,

在此处输入图像描述

谁能告诉我我需要在上面的 python 脚本中做的改变?

标签: sql-serverpython-3.x

解决方案


您可以在 python 脚本中使用以下查询。if Not exists将根据where 子句中的条件检查记录是否已经存在,如果记录存在,则它将转到 else 语句,您可以在其中更新或执行任何操作。

检查数据库中的现有记录比使用 python 脚本检查更快。

if not exists (select * from Table where Name = '') 
begin
insert into Table values('b', 'Japan', 70)
end
else
begin
update Table set Age=54, Country='Korea' where Name = 'A'
end

查找现有的重复记录,然后使用以下查询

select Name, count(Name) as dup_count from Table
group by Name having COUNT(Name) > 1

推荐阅读