Я использую 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 и т. Д.), Поэтому я не уверен, почему это не работает.
Любые предложения будут ценны!
Спасибо,
Грег