1

这是一个行政问题。有人声称这是我们的错,我们的代码被破坏了,当问题出现在不同的代码中时,可以更新我们导入的内容。所以,这不是问题。


我们将一起添加到字典中的值并将它们存储在一个变量中,然后添加到 NDB 数据存储中。

本质上,我们正在导入 csv 并解析数据。如果两个值的总和大于 1,000.00,则浮点数更改为千位值。

例子:

  • 1263.13 将更改为 1
  • 51367.42 将更改为 51
  • 218.12 将保持不变 (218.12)

我们认为这是存储数据的问题,但我们无法重现该问题,并且已经验证了少量数据会出现“误报”。IE:没有问题。

从 blob 中读取 csv:

blob_reader = blobstore.BlobReader(blob_info.key())
raw_blob = blob_reader.read()
result = [row for row in csv.DictReader(StringIO.StringIO(raw_blob), delimiter=',')]

# loop through all rows in the data/csv
for v, row in enumerate(result):

    if set_data_type(row, v) == False:
        return False
    else:
        length = len(result) + 1
        # check values for type
        if check_values(row, v, length) == False:
            return False
        else:
            # calculate numerical data for storage
            calculate_vars(row, v)

            if not error_log:
                # if no errors, store the row in the datastore
                store_data(row, v)

# if there are no errors, add to transaction log.
if not error_log:
    added_records = len(result)
    old_new = "Upload Success - " + str(added_records) + " records added."
    transactions(module, 'Datastore', data[0], 'CSV Bulk Upload', old_new, old_new)

计算值:

def calculate_vars(row, v):
    # calcuate values for storage based on
    # data passed from the csv
    try:
        float_sum = float(row['float1']) + float(row['float2'])
    except Exception, e:
        catch_error(["Value calculation error in row ", v+1, " Error: ", e])
        return False
    else:
        # global var
        calculated_val = float_sum

储值:

def store_data(row, v):
    try:
        entry = Datastore(
            float_sum = calculated_val
        )
    except Exception, e:
        catch_error(["StoreDataError in row ", v, e])
        return False
    else:
        # add entry to datastore.
        entry.put()

数据存储列“float_sum”是 ndb.FloatProperty()

我们要弄清楚的是:当数字大于 1,000 时,什么会导致浮点数被截断为千位而不是别的。显然,我们知道将两个浮点数加在一起通常不会导致这种情况,这就是为什么我们认为这可能是数据存储本身的问题。

4

0 回答 0