Вставка переменной Python в цикле в базу данных SQLite с использованием SQLAlchemy - PullRequest
0 голосов
/ 31 декабря 2011

Я использую 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') 

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

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 части скрипта, а не в значении , но я не уверен в этом. Из всего, что я вижу, клавиши - это те же строки, которые я вижу, когда делаю это «неэффективно» (т. Е. T1_star и т. Д.), Поэтому я не уверен, почему это не работает.

Любые предложения будут с благодарностью!

Спасибо

Грег

1 Ответ

3 голосов
/ 31 декабря 2011

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

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

setattr(row, key, value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...