0

我正在从 Web 源读取 CSV 文件,并希望将其存储在我的 GAE 数据存储中。CSV 数据带有一个标题行,通过一些操作将匹配我的数据存储中的字段(例如,用下划线替换 CSV 文件中的空格以匹配数据存储)。我只想遍历 CSV 文件每一行中的字段并将它们放入数据存储区。

我的问题是如何使用字符串引用数据存储中的字段并将其值设置为另一个字符串?

from google.appengine.ext import db
from urllib import urlopen
from csv import DictReader

class Table(db.Model):
    field_one = db.StringProperty() # equivalent to 'field one' column in CSV data
    field_two = db.StringProperty() # equivalent to 'field two' column in CSV data

def store_csv_data(url):
    # Request the url with the csv data
    f = urlopen(url)
    csv_dict = DictReader(f, delimiter=',', quotechar='"')
    for line in csv_dict:
        # Do some processing on the data (not shown here)
        row = Table()
        for field in line:
            db_field = field.replace(' ','_') # Make the csv field match the db field
            db_value = line[field] # The value I want to store in the datastore
            row.db_field = db_value # THIS IS WHERE THE CODE FAILS
        row.put()

这实际上不会产生任何错误,它只是在数据存储中创建了一堆空行。

4

2 回答 2

3
setattr(row, db_field, db_value)
于 2013-03-09T20:13:24.100 回答
0

我猜你的问题出在这条线上:

db_value = line[field]

应该:

db_value = field[0]

您必须将零替换为字段列号,因此请使用上面的示例:

class Table(db.Model):
    field_one = db.StringProperty()
    field_two = db.StringProperty()

field_one 为 0,field_2 为 1

于 2013-03-09T20:15:16.490 回答