Python вставить переменную в цикле в базу данных SQLite с помощью SQLAlchemy

Я использую SQLAlchemy с декларативной базой и Python 2.6.7 для вставки данных в цикле в базу данных SQLite.

В качестве краткой предыстории я реализовал словарный подход к созданию набора переменных в цикле. Я пытаюсь очистить некоторые данные с веб-сайта и получить от 1 до 12 фрагментов данных в следующем элементе:

overall_star_ratings = doc.findall("//div[@id='maincontent2']/div/table/tr[2]//td/img")
count_stars = len(overall_star_ratings)

В пустой базе данных SQLite у меня есть переменные «t1_star» ... «t12_star», и я хочу перебрать список значений в «total_star_ratings» и присвоить значения переменным базы данных, которые варьируются в зависимости от страницы. Я использую SQLAlchemy, поэтому (на очень неэффективном языке) я хочу назначить значения и вставить в БД следующим образом (я перебираю «строки» в коде, так что «строка» команда вставляет значение для * t1_star * в столбец базы данных 't1_star' и т. д.):

if count==2:
    row.t1_star = overall_star_ratings[1].get('alt') 
    row.t2_star = overall_star_ratings[2].get('alt')         
elif count==1:
    row.t1_star = overall_star_ratings[1].get('alt') 

Это работает, но очень неэффективно, поэтому я применил "словарный" подход к созданию переменных, как я видел в некоторых вопросах "переменные переменные" в Stack Overflow. Итак, вот что я пробовал:

d = {}
for x in range(1, count_stars+1):
    count = x-1 
    d["t{0}_star".format(x)] = overall_star_ratings[count].get('alt') 

Это работает для создания ключей 't1_star', 't2_star' для словаря, а также значений. Проблема возникает, когда я пытаюсь вставить данные в базу данных. Я попытался добавить следующее в цикл выше:

    key = "t{0}_star".format(x)
    value = d["t{0}_star".format(x)]
    row.key = value

Я также пробовал добавить следующее после завершения вышеуказанного цикла:

for key, value in d.items():
    row.key = value

Проблема в том, что он ничего не вставляет. Похоже, что проблема в части сценария row.key, а не в value, но я не уверен в этом. Из всего, что я вижу, keys - это те же строки, которые я вижу, когда делаю это «неэффективным» способом (например, t1_star и т. Д.), Поэтому я не уверен, почему это не работает.

Любые предложения будут ценны!

Спасибо,

Грег


person Gregory Saxton    schedule 31.12.2011    source источник


Ответы (1)


Доступ к атрибутам Python так не работает. row.key ищет атрибут с буквальным именем "key", а не по значению в переменной key.

Вероятно, вам нужно использовать setattr:

setattr(row, key, value)
person Daniel Roseman    schedule 31.12.2011