Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我无法在此嵌套字典中创建其他键?_Python_Sql_Python 2.7_Dictionary - Fatal编程技术网

Python 为什么我无法在此嵌套字典中创建其他键?

Python 为什么我无法在此嵌套字典中创建其他键?,python,sql,python-2.7,dictionary,Python,Sql,Python 2.7,Dictionary,我有一个包含以下列的SQL表:Firm、Product、Alias 我只需要使用一个SQL Execute查询创建此表的数据集。 “公司”列有重复项,每个公司我只需要一本字典。每个公司都有自己的产品——公司词典中的每个产品都需要自己的词典。每个公司和产品组合都有自己的别名。别名应该位于最深层字典的列表中:Firm Dict>Product Dict>Alias list def test(): d={} cursor=conn.cursor(如dict=True) execute('从where

我有一个包含以下列的SQL表:Firm、Product、Alias

我只需要使用一个SQL Execute查询创建此表的数据集。

“公司”列有重复项,每个公司我只需要一本字典。每个公司都有自己的产品——公司词典中的每个产品都需要自己的词典。每个公司和产品组合都有自己的别名。别名应该位于最深层字典的列表中:Firm Dict>Product Dict>Alias list

def test():
d={}
cursor=conn.cursor(如dict=True)
execute('从wheremifirminfosysmapping\u v'中选择FirmName、InfoSysName、别名、wheremi\u UserId)
对于光标中的行:
如果行['FirmName']!='*':
d[行['FirmName']={}
d[行['FirmName']][行['InfoSysName']]=[]
打印d
康涅狄格州关闭
我可以返回一本看起来像这样的词典:

{u'FirmA': {u'ProductZ': []}, {u'FirmB': {u'ProductZ': []}, {u'FirmA': {u'ProductZ': []}

但是,您可以看到,只有我的SQL表中的最后一个产品被添加到公司字典中。我需要能够在SQL表中添加公司拥有的所有产品,并且只添加公司拥有的产品。

您不断覆盖您创建的词典。您需要稍微更改结构并添加代码,以首先检查公司是否已添加到字典中:

def test():
    d = {}
    cursor = conn.cursor(as_dict=True)

    cursor.execute('SELECT FirmName, InfoSysName, Alias, WhereAmI_UserId FROM WhereAmIFirmInfoSysMapping_v')
    for row in cursor:
        if row['FirmName'] != '*':
            if row['FirmName'] not in d:
                d[row['FirmName']] = {}
            d[row['FirmName']][row['InfoSysName']] = []

    print d

    conn.close()

您不断覆盖您创建的词典。您需要稍微更改结构并添加代码,以首先检查公司是否已添加到字典中:

def test():
    d = {}
    cursor = conn.cursor(as_dict=True)

    cursor.execute('SELECT FirmName, InfoSysName, Alias, WhereAmI_UserId FROM WhereAmIFirmInfoSysMapping_v')
    for row in cursor:
        if row['FirmName'] != '*':
            if row['FirmName'] not in d:
                d[row['FirmName']] = {}
            d[row['FirmName']][row['InfoSysName']] = []

    print d

    conn.close()