Python: SQL-запрос и сохранение его в словаре (структура данных с битовой сложностью) - PullRequest
0 голосов
/ 04 ноября 2011

На основе пары вызовов Api я построил следующую структуру данных (словарь).Я использовал словарь Python в качестве места хранения.

325167 A,
953929 B, A, C
824420 D, B,
796992 K, M, Z,
825116 J, F, E,

Я беру каждое значение, отправляю запрос в базу данных и получаю набор результатов, выбираю что-то из some_table, где some_table.someCol = 'A'.Затем я пытаюсь сохранить эти данные в другом словаре, чтобы использовать их в будущем.

Это ошибка, которую я сейчас пытаюсь устранить, cl_to - имя столбца запроса, который фокусируется.

Traceback (most recent call last):
  File "Category.py", line 148, in <module>
    categoryResults.append(categoryRow['cl_to']);
TypeError: 'NoneType' object is not subscriptable
{'cl_to': 'EP-plater_etter_\xc3\xa5r'}
{'cl_to': 'Musikk_i_2002'}
None

Вот так выглядит мой код:

#Dictionary to save initial category with the rest of cl_to
baseCategoryTree = {}
categoryResults = []

# query get all the categories a category is linked to
categoryQuery = "select cl_to from sometable cl left join anotherTable p on cl.cl_from = p.another_column where p.some_column=14 and p.another_column ='";
cursor = db.cursor(cursors.SSDictCursor);

    for key, value in idTitleDictionary.iteritems():
        for startCategory in value[0]:
            #print startCategory + "End of Query";
            try:
                baseCategoryTree[startCategory] = [];
                #print categoryQuery + startCategory;
                cursor.execute(categoryQuery + startCategory + "'");
                done = False;
                while not done:
                    categoryRow = cursor.fetchone();
                    print categoryRow;
                    if not categoryRow:
                        done = True;
                        continue;
                categoryResults.append(categoryRow['cl_to']);
                baseCategoryTree[startCategory].append(categoryResults);
            except Exception, e:
                traceback.print_exc();

Best;NH

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

Я думаю, вы имели в виду categoryResults.append(categoryRow['cl_to']) в цикле while.Теперь вы просто зацикливаетесь, пока categoryRow не станет None, а затем попытаетесь добавить и получить очевидную ошибку.

Кстати, избавьтесь от всех ; в конце строк.Это Python, а не C / C ++.; требуется только в том случае, если вы хотите, чтобы в одной строке было два оператора, например:

do_some_thing(); do_some_other_thing()

Но, как правило, это плохо для удобства чтения.Вместо этого используйте отдельные строки.

do_some_thing()
do_some_other_thing()
1 голос
/ 04 ноября 2011

...

            while not done:
                categoryRow = cursor.fetchone();
                print categoryRow;
                if not categoryRow:
                    done = True;
                    continue;
            categoryResults.append(categoryRow['cl_to']);

...

continue будет перенесено на while над ним, и точка categoryRow будет None.

Тогда когда:

 categoryRow['cl_to'] 

встречается ... бум.

Возможно, вы захотите следующее, если хотите захватить все строки:

...

            while not done:
                categoryRow = cursor.fetchone();
                print categoryRow;
                if not categoryRow:
                    done = True;
                    continue;
                categoryResults.append(categoryRow['cl_to']);

...

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