0

我每天都运行批量插入 cron 作业。但是有些值会丢失,当我重新运行数据时,这些值会添加到现有数据中,而不是更新。有没有办法只插入尚未插入的文档。

我的代码:

query = bigQuery.get_data(query)
bulk = col.initialize_unordered_bulk_op()

for i, row in enumerate(query):
    bulk.insert({
        'date': str(row['day_dt']),
        'dt': datetime.strptime(str(row['day_dt']), '%Y-%m-%d'),
        'site': row['site_nm'],
        'val_counts': row[8]
    })

bulk_result = bulk.execute()

现在,每次查询运行时它都会重新插入所有值。有没有办法只添加尚未添加的值。

4

1 回答 1

0

我显然不完全了解您的数据结构,也不完全清楚您要做什么,但我认为应该这样做。

query = bigQuery.get_data(query)

new_things = []
for i, row in enumerate(query):
    if not col.find_one(your_query): # make sure that the document does not exist already
        # add data to an array
        new_things.append({
        'date': str(row['day_dt']),
        'dt': datetime.strptime(str(row['day_dt']), '%Y-%m-%d'),
        'site': row['site_nm'],
        'val_counts': row[8]
    })

# use insert_many to insert all the documents
bulk_result = col.insert_many(newthings)

检查代码旁边的注释以获取解释。如果您像您提到的那样是菜鸟,我会坚持使用更简单的做事方式并随着您经验的增长扩展您的代码。

于 2019-09-27T18:32:30.343 回答