0

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

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

东风:

Id   Name   Qualification
3    Gini    Engg
4    Bist    Lawyer

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

我想要做的是从 sql 表中删除记录。我所做的是,

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

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

4

1 回答 1

2

一种选择是将那些从 pandas 更新的记录插入到单独的表中。让我们在这里称呼它records_updated

然后我们可以运行查询从原始表中删除 IDrecords_updated为 的记录,然后将记录插入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

PS SQL 语法可能会因方言而略有不同。在某些方言中,可以将 DELETE 和 INSERT 操作组合到一个 UPSERT 中,并将更新的记录存储为临时表,这样我们就不需要手动删除它。

于 2020-08-30T18:17:47.700 回答