在数据库中使用查询从SQL表中删除记录

2024-05-15 22:41:02 发布

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

我需要从SQL查询中删除SQL表中预先存在的记录。例如 SQL表:

Id   Name   Qualification
1    Rick    Lawyer
2    John    Engg
3    Gini    Doctor
4    Bist    Architect
5    mady    lawyer

df:

Id   Name   Qualification
3    Gini    Engg
4    Bist    Lawyer

如何编写查询以从pandas更新表,因为在实时情况下会有更多列,因此无法编写更新查询。我们可以做的一件事是,首先删除那些具有相同Id的行,然后将df推入表中

我试图做的是从sql表中删除记录。我所做的是

pd.read_sqlquery('''
DELETE FROM TABLE_NAME
WHERE Id in ({})
''').format(df2.Id.to_list())--- 
Getting Error

如何将我的df2 Id传递给查询


Tags: nameiddfsql记录johnrickdf2
1条回答
网友
1楼 · 发布于 2024-05-15 22:41:02

一种选择是将pandas中更新的记录插入一个单独的表中。让我们在这里称之为records_updated

然后,我们可以运行一个查询,从原始表中删除在records_updated中找到ID的记录,然后将records_updated中的记录插入到原始表中

from sqlalchemy import create_engine
engine = create_engine('sqlite://', echo=False)

# save original records to 'records' table
df0.to_sql('records', con=engine)

# save updated records to 'records_updated' table
df.to_sql('records_updated', con=engine)

# delete updated records from 'records'
engine.execute("DELETE FROM records WHERE Id IN (SELECT Id FROM records_updated)")

# insert updated records from 'records_updated' to 'records'
engine.execute("INSERT INTO records SELECT * FROM records_updated")

# drop 'records table'
engine.execute("DROP TABLE records_updated")

# read from records
print(pd.read_sql('records', con=engine))

    Name Qualification
Id                    
1   Rick        Lawyer
2   John          Engg
5   mady        lawyer
3   Gini          Engg
4   Bist        Lawyer

根据方言的不同,SQL语法可能略有不同。在某些方言中,可以将删除和插入操作合并到单个UPSERT中,也可以将更新的记录存储为临时表,这样我们就不需要手动删除它

相关问题 更多 >