这是一个行政问题。有人声称这是我们的错,我们的代码被破坏了,当问题出现在不同的代码中时,可以更新我们导入的内容。所以,这不是问题。
我们将一起添加到字典中的值并将它们存储在一个变量中,然后添加到 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 时,什么会导致浮点数被截断为千位而不是别的。显然,我们知道将两个浮点数加在一起通常不会导致这种情况,这就是为什么我们认为这可能是数据存储本身的问题。