插入到MySQL表中,如果存在非KEY字段则更新

imzjd6km  于 12个月前  发布在  Mysql
关注(0)|答案(1)|浏览(95)

我想插入到MySQL或更新MySQL,如果存在,而不必运行2个不同的查询。
我查了Create if an entry if it doesn't exist, otherwise update?

INSERT INTO table (a) VALUES (0)  ON DUPLICATE KEY UPDATE

但只有当你在键上检查双精度时才有效。问题是我想检查另一个字段,它不是关键字,但仍然保持唯一性。我想在我的字典中检查'符号'时添加或更新:
我得到的数据是(例子)

forex = [{'symbol': 'EURUSD', 'price': '1.06763000'}, {'symbol': 'GBPEUR', 'price': '0.90339600'}, {'symbol': 'EURJPYC', 'price': '0.000011200'}]

我想修改的INSERT INTO是:

mycursor.executemany(f"INSERT INTO `param_forex` (Ticker,Price) 
                    VALUES ( %(symbol)s, %(price)s)", forex)
mydb.commit()

我不想使用REPLACE,因为自动递增字段(REPLACE删除和插入)我正在检查重复的列是表中的Ticker和字典中的符号。
我卡住了。有解决办法吗?

jckbn6z7

jckbn6z71#

您可以使用INSERT ... ONDUPLICATEKEYUPDATE语句,但正如注解中提到的,您需要在'Ticker'列上有一个唯一的索引。例如:

forex = [{'symbol': 'EURUSD', 'price': '1.06763000'}, {'symbol': 'GBPEUR', 'price': '0.90339600'}, {'symbol': 'EURJPYC', 'price': '0.000011200'}]

query = "INSERT INTO `param_forex` (Ticker, Price) VALUES (%(symbol)s, %(price)s) ON DUPLICATE KEY UPDATE Price = VALUES(Price)"

mycursor.executemany(query, forex)
mydb.commit()

要做到这一点,只需修改表以包含一个唯一键:

ALTER TABLE `param_forex` ADD UNIQUE INDEX `idx_Ticker` (`Ticker`);

相关问题