gpt4 book ai didi

python - 如何将数据的时间窗口插入到与具有唯一约束的现有行部分重叠的表中

转载 作者:行者123 更新时间:2023-11-28 23:53:45 24 4
gpt4 key购买 nike

如何将数据的时间窗口插入到与具有唯一约束的现有行部分重叠的表中。

这是一个代码片段:

  # Create the insert strings
column_str = """data_vendor_id, symbol_id, price_date, created_date,
last_updated_date, open_price, high_price, low_price,
close_price, volume, adj_close_price"""
insert_str = ("%s, " * 11)[:-2]
final_str = "INSERT INTO daily_price (%s) VALUES (%s)" % \
(column_str, insert_str)

当我现在调用它时,我得到了有意义的 IntegrityError。理想情况下,它会让新行在冗余行上优雅地插入和失败。不幸的是,我的 try/except block 不允许合法行并使整个查询失败:

   for i, t in enumerate(tickers):
print(
"Adding data for %s: %s out of %s" %
(t[1], i+1, lentickers)
)
yf_data = price_retrieval.get_daily_historic_data_yahoo(t[1], start_date.timetuple())
try:
price_retrieval.insert_daily_data_into_db('1', t[0], yf_data)
except IntegrityError:
continue

是否有 python 或 mysql 解决方案来使此插入更具容错性?

最佳答案

您正在寻找 INSERT IGNOREREPLACE,具体取决于您希望如何处理重复数据。

插入忽略
如果要保留旧数据并丢弃新的重复数据,则要使用 INSERT IGNORE。这会将唯一键违规变成警告,并且所有未违规的行将被正常处理。如果没有 IGNORE 关键字,任何唯一的违规行为都会中止整个 INSERT 批处理。

final_str = "INSERT IGNORE INTO daily_price (%s) VALUES (%s)" % \
(column_str, insert_str)

Insert documentation

替换
如果要用新的重复数据覆盖旧数据,则需要使用 REPLACE 语句而不是 INSERTREPLACE 是对 SQL 标准的 MySQL 特定扩展。它会插入不存在的行,如果遇到重复行,它会先删除旧行,然后插入新行。

final_str = "REPLACE INTO daily_price (%s) VALUES (%s)" % \
(column_str, insert_str)

Replace documentation

关于python - 如何将数据的时间窗口插入到与具有唯一约束的现有行部分重叠的表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32146919/

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