gpt4 book ai didi

python - 如何使用 Pandas 在 MySQL-DB 中加载和保存部分表

转载 作者:行者123 更新时间:2023-11-29 05:08:22 24 4
gpt4 key购买 nike

Pandas 新手。

一个SQL表由3列组成(ID为主键):

> ID    VALUE1    VALUE2 
> 1 11 28
> 2 21 (None)
> 3 31 56
> 4 41 (None)

使用 Pandas,我加载 VALUE2 为 (无) 的所有行:

query = "SELECT * FROM `TABLE_NAME`  WHERE (`VALUE2` IS NULL)"
engine = create_engine("mysql://user:pwd@ip/db"
df = pd.read_sql(query, con=engine)
engine.dispose()

到目前为止一切正常。

加载后,根据某些规则计算缺失的 VALUE2。

问题

如果我更新数据库

df.to_sql(TABLE_NAME, con=engine, if_exists="replace", index=False)

所有未加载到数据框中的原始行都丢失了:

> ID    VALUE1    VALUE2 
> 2 21 103
> 4 41 72

有没有办法在不改变原始行的情况下进行更新?

我想得到这个:

> ID    VALUE1    VALUE2 
> 1 11 28
> 2 21 103
> 3 31 56
> 4 41 72

看起来整个表都被重写了而不是更新了...

加载整个表只是为了更新几行是非常低效的。这实际上可以解决问题,但这是 Not Acceptable 。

知道“为什么”吗?

最佳答案

您正在使用选项 if_exists="replace"

来自 Pandas 文档(我的底气):

replace: If table exists, drop it, recreate it, and insert data.

所以它完全按照您的要求进行操作。您可以尝试使用 if_exists="append" 来代替,但它仍然可能无法为您提供所需的行为。

或者,您可以直接使用 MySQLdb 与表交互,并使用 UPDATE .

关于python - 如何使用 Pandas 在 MySQL-DB 中加载和保存部分表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44073181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com