sql-server - 如何使用 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 脚本中做的改变?
解决方案
您可以在 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
推荐阅读
- sql-server - 在 SQL Server 2008 的 PIVOT 查询中使用 ISNULL
- python-3.x - Web scraping hidden element with BeautifulSoup
- javascript - 如何将标题添加到反应表
- azure-logic-apps - Azure Logic Apps - Get Blob content from Blob Event
- python - Running Python Process Overnight and Working Around System Reboots?
- php - 在 ProviderRepository.php 第 208 行中找不到提供程序类
- cognos - Cognos 单个报告,多个 CSV 页面到单个电子邮件
- java - How to share messages, published on Topic, between multiple VMs, in Spring Jms Tibjms
- react-native - 如何修复未定义不是函数(评估'(0 _reactnavigation.stacknavigator)')
- r - 快速将数据框的几列转换为不同的类