首页 > 解决方案 > 从 SQL db 中连续检测 2 个重复值并更新,否则插入(使用 python)

问题描述

我想插入 MySQL 数据库,除非两列值匹配,在这种情况下我想更新 2 个值。使用 Python。

我的专栏是:ID、Ticker、Subreddit、Score、Rockets 和 DateTime

我想做的是:

如果代码和日期(仅)不存在,则插入新记录,否则更新分数和火箭

我所说的“日期(仅)”是指从 DATETIME 开始,我只想匹配日期。所以如果是:2021-02-05 09:52:54 我想检查 2021-02-05 是否存在用于 Ticker。

这是完整条目的样子:

704   AYOLO   r/wallstreetbets    1843    0   2021-02-05 09:52:54

要插入数据库,我目前有这个:

def upload_to_database(ticker_collection):
  trend_data = []
  trend_data_table = "trend_data"
  trend_data_columns = "Ticker, Subreddit, Score, Rockets"
  trend_data_sql = "INSERT INTO " + trend_data_table + " (" + trend_data_columns + ") VALUES (%s, %s, %s, %s)"

  for ticker in ticker_collection:
    ticker_subreddit = ticker_collection[ticker]['subreddit']
    ticker_score = ticker_collection[ticker]['score']
    ticker_rockets = ticker_collection[ticker]['rockets']
    
    ticker_data = (ticker, ticker_subreddit, ticker_score, ticker_rockets)

    trend_data.append(ticker_data)
  
  the_db_cursor.executemany(trend_data_sql, trend_data)
  the_database.commit()

  return the_db_cursor.rowcount, "was inserted."

我已经阅读了很多内容,ON DUPLICATE KEY UPDATE VALUES但我不确定如何合并它来检查两列,以及如何仅提取和匹配日期,然后将其与我机器的当前日期匹配。

标签: pythonmysql

解决方案


您必须将“ticker”和“date”列设置为主键或唯一索引。如果你这样做,那么你可以将你的 SQL 查询设置为:

INSERT INTO your tablename (column_list)
VALUES (value_list)
ON DUPLICATE KEY UPDATE
updatecolumn_1 = value_1,
updatecolumn_1 = value_2,
........................,
........................,
updatecolumn_n = value_n

;


推荐阅读