gpt4 book ai didi

python - 如何使用 SQLAlchemy 将 pandas DataFrame 更新到 MySQL

转载 作者:行者123 更新时间:2023-12-04 01:14:13 25 4
gpt4 key购买 nike

我正在将数据从数据帧推送到 MySQL,现在它只会在数据不存在(追加)时向表中添加新数据。这很完美,但是我也希望我的代码检查记录是否已经存在然后需要更新。所以我需要它来追加+更新。我真的不知道如何开始解决这个问题,因为我卡住了......以前有人试过这个吗?

这是我的代码:

engine = create_engine("mysql+pymysql://{user}:{pw}@localhost/{db}"
.format(user="root",
pw="*****",
db="my_db"))
my_df.to_sql('my_table', con = engine, if_exists = 'append')

最佳答案

您可以在数据库端使用下一个解决方案:

首先:创建用于从 Pandas 插入数据的表(暂且称之为测试):

CREATE TABLE `test` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
`capacity` INT(11) NOT NULL,
PRIMARY KEY (`id`)
);

第二:为结果数据创建表(我们称之为cumulative_test)与测试完全相同的结构:

CREATE TABLE `cumulative_test` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
`capacity` INT(11) NOT NULL,
PRIMARY KEY (`id`)
);

第三:在每次插入测试表时设置触发器将在第二个表中插入矿石更新记录,如:

DELIMITER $$

CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `before_test_insert` BEFORE INSERT ON `test`
FOR EACH ROW BEGIN
DECLARE _id INT;

SELECT id INTO _id
FROM `cumulative_test` WHERE `cumulative_test`.`name` = new.name;

IF _id IS NOT NULL THEN
UPDATE cumulative_test
SET `cumulative_test`.`capacity` = `cumulative_test`.`capacity` + new.capacity;
ELSE
INSERT INTO `cumulative_test` (`name`, `capacity`)
VALUES (NEW.name, NEW.capacity);
END IF;
END;
$$

DELIMITER ;

因此,您已经将值插入到测试表中,并在第二个表中获得计算结果。触发器内部的逻辑可以满足您的需求。

关于python - 如何使用 SQLAlchemy 将 pandas DataFrame 更新到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63881687/

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