python - 从 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
但我不确定如何合并它来检查两列,以及如何仅提取和匹配日期,然后将其与我机器的当前日期匹配。
解决方案
您必须将“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
;
推荐阅读
- amazon-web-services - 使用目标触发器从 Lambda 到 SQS 的多条消息
- python - 如何使用 Python 在 AWS CDK 中构造 DHCPOptionsAssociation
- ssl - Istio 远程错误:tls:错误解密消息
- github - 图像和 CSS URL 路径无法解析为浏览器中的正确位置
- rxjs - Rxjs - 在特定情况下取消去抖动
- javascript - 在 React 中以 Modal 形式显示相同的数据
- matrix - 你如何编写一个fortran程序来打印方阵中所有元素的总和
- git - 我可以在本地提交到 origin/master 分支吗?
- prolog - 独家解决方案?
- python - 控制 matplotlib 图像的焦点