Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将数据的时间窗口插入到与具有唯一约束的现有行部分重叠的表中_Python_Mysql - Fatal编程技术网

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

Python 如何将数据的时间窗口插入到与具有唯一约束的现有行部分重叠的表中,python,mysql,Python,Mysql,如何将数据的时间窗口插入到与具有唯一约束的现有行部分重叠的表中 下面是一段代码片段: # 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_c

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

下面是一段代码片段:

  # 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)
当我现在调用它时,我得到了有意义的积分误差。理想情况下,它将允许新的行插入,并在冗余行上正常地失败。很遗憾,我的try/except块不允许合法行,导致整个查询失败:

   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解决方案可以使这种插入更具容错性

我的理解是,
price\u retrieval.insert\u daily\u data\u into\u db
插入了许多行,但是在第一个失败的行中断了吗?您需要使用
try
来包装单个记录插入,而不是包装一组记录。

您正在寻找
插入忽略
替换
,这取决于您希望如何处理重复数据

插入忽略
如果要保留旧数据并丢弃新的重复数据,请使用
INSERT IGNORE
。这将把唯一的密钥冲突变成警告,所有不冲突的行都将正常处理。如果没有
IGNORE
关键字,任何唯一的冲突都将中止整个
INSERT
批处理

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

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

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

您所说的“不允许合法行”是什么意思?表上有哪些键,以及“部分重叠”是什么意思?唯一的约束是pricedate和ticker_id。部分重叠意味着我插入的某些行与以前的行冲突,而某些行是新行“合法行”。帕特里克斯的回答奏效了。谢谢