我正在从网络源读取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()
这实际上不会产生任何错误,它只会在数据存储区中创建一堆空行。
答案 0 :(得分:3)
setattr(row, db_field, db_value)
答案 1 :(得分:0)
我猜你的问题就在这一行:
db_value = line[field]
应该是:
db_value = field[0]
您必须使用字段列号替换Zero,因此请使用上面的示例:
class Table(db.Model):
field_one = db.StringProperty()
field_two = db.StringProperty()
field_one为0,field_2为1