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 に答える