Python:SQL查询并将其保存在字典中(比特复杂的数据结构)

时间:2011-11-04 00:21:46

标签: python dictionary

基于几个Api调用,我构建了以下数据结构(Dictionary)。我使用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();

最佳; N-H

2 个答案:

答案 0 :(得分:1)

...

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

...

continue将换行到while上方categoryRow,此时 categoryRow['cl_to'] 将为无。

然后:

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

遭遇......热潮。

如果要捕获所有行,可能需要以下内容:

...

{{1}}

...

答案 1 :(得分:1)

我认为你在categoryResults.append(categoryRow['cl_to'])循环中意味着while。现在,您只是循环,直到categoryRowNone,然后尝试追加并获得明显的错误。

顺便说一下,摆脱行尾的所有;。这是Python,而不是C / C ++。只有在一行中需要两个语句时才需要;,例如:

do_some_thing(); do_some_other_thing()

但这对可读性来说通常是一件坏事。改为使用单独的行。

do_some_thing()
do_some_other_thing()