温馨提示:本文翻译自stackoverflow.com,查看原文请点击:function - Python ldap3 print entries based on variable
function ldap python-3.x

function - 基于变量的Python ldap3打印条目

发布于 2020-04-04 00:25:23

我是Python的新手,前面有个愚蠢的问题

我需要将MySQL数据库与ldap的条目进行比较。当我尝试遍历字典并将它们传递给ldap3条目以显示结果时,我创建了一个字典来保存相应的值,它将变量作为文字。

for x in values_dict:
    value2=values_dict[x]
    try:
        ldap_conn.entries[0].value2
    except Exception as error:
        print(error)
    else:
        print(value2)

attribute 'value2' not found

如果我将value2替换为'sn'或我已提取的任何其他属性,则它可以正常工作。我也玩过exec(),但这什么也没返回。

for x in values_dict:
    value2=values_dict[x]
    test1='ldap_conn.entries[0].{}'.format(value2)
    try:
        result1=exec(test1)
    except Exception as error:
        print(error)
    else:
        print(result1)
None

有任何想法吗?

编辑1:根据要求,这里是values_dict的值。如前所述,循环确实正确解析了这些属性,ldap确实返回了属性,但是当我尝试使用变量从条目中查找属性时,该变量实际上是采用的。

values_dict = {
        "First_Name": "givenname",
        "Middle_Name": "middlename",
        "Last_Name": "sn",
        "Preferred_Name": "extensionattribute2",
        "Work_Location": "physicaldeliveryofficename",
        "Work_City": "l",
        "Work_State": "st",
        "Work_Postal": "postalcode",
        "Work_Email": "mail"
        }

查看更多

提问者
TurboAAA
被浏览
154
larsks 2020-01-31 20:44

somevariable.someattr您在此处使用的语法

ldap_conn.entries[0].value2

总是意味着“访问命名的属性someattrsomevariable。” 它始终被解释为文字字符串。如果需要动态访问属性,请使用以下getattr函数:

getattr(ldap_conn.entries[0], value2)

您当前不在任何地方分配该结果,因此您可能需要类似以下内容:

result1 = getattr(ldap_conn.entries[0], value2)