从 SQL db 中连续检测 2 个重复值,否则更新插入(使用 python)
Posted
技术标签:
【中文标题】从 SQL db 中连续检测 2 个重复值,否则更新插入(使用 python)【英文标题】:Detect 2 duplicate values in a row from SQL db and update otherwise insert (using python) 【发布时间】:2021-02-04 23:20:13 【问题描述】:我想插入 mysql 数据库,除非两列值匹配,在这种情况下我想更新 2 个值。使用 Python。
我的栏目是:ID、Ticker、Subreddit、Score、Rockets 和 DateTime
我想做的是:
如果代码和日期(仅)不存在,则插入新记录,否则更新分数和火箭
我所说的“DATE(仅)”是指从 DATETIME 开始,我只想匹配日期。所以如果是: 2021-02-05 09:52:54 我想检查一下 Ticker 是否存在 2021-02-05。
这是一个完整条目的样子:
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
的内容,但我不知道如何将其合并以检查两列,以及如何仅提取和匹配日期,然后将其与我机器的当前日期匹配。
【问题讨论】:
这两列是主键吗? 暂时没有,但我可以制作它们,它们都必须是主键吗? 好吧,我想不是……它们也可能是唯一的键…… 我已将它们设置为唯一,这与我的代码需求有何关联? 【参考方案1】:MySQL 显然可以创建功能索引,因此您可以在没有生成列的情况下使其工作。我在小提琴网站上没有成功,但我确实使用索引生成列成功
CREATE TABLE IF NOT EXISTS blah (
id INT AUTO_INCREMENT PRIMARY KEY,
tick varchar(10),
score varchar(10),
dt datetime,
d datetime generated always as (date(dt)),
unique key x(tick, d)
);
insert into blah (score, tick, dt) values('a', 'a','2020-01-01 12:34');
insert into blah (score, tick, dt) values('new', 'a','2020-01-01 12:35')
ON DUPLICATE KEY UPDATE score=VALUES(score);
如果您将最后一行注释掉,您会看到有关键中重复值的错误..
使用最后一行而不是插入新记录,现有行的分数列将更新为“新”
https://www.db-fiddle.com/f/931XpBo8PFqMzL25uoy5zy/0
【讨论】:
【参考方案2】:您必须将“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
;
【讨论】:
以上是关于从 SQL db 中连续检测 2 个重复值,否则更新插入(使用 python)的主要内容,如果未能解决你的问题,请参考以下文章