【问题标题】:Convert web.py iterbetter to dictionary or list将 web.py iterbetter 转换为字典或列表
【发布时间】:2012-08-11 09:59:15
【问题描述】:

我正在尝试使用 web.py 的 database.select 从 MySQL 表 (ipb_members) 中获取一些数据。这是我正在使用的代码:members = db.select("ipb_members", where="name=\"asdfquerty\"")

它返回一个 iterbetter 的实例。我想弄清楚的是如何将其转换为字典或列表。我看到this,它建议使用list(),但这只是将所有内容放在第一个索引中。我也试过 dict(),但也没有用。我做错了什么?

【问题讨论】:

    标签: python database list dictionary web.py


    【解决方案1】:

    这应该可行:

    members = db.select("ipb_members", where="name=\"asdfquerty\"")
    for member in members #members is IterBetter
        print member.posts #member is Storage
    

    请注意,如果您只需要迭代一次 db.select 的结果,则不必调用 .list()

    【讨论】:

    • 它仍然会将所有内容(包括<Storage { 位)转储到members[0]
    • 我不明白你需要什么。 Storagedict 相同,但您可以使用点语法record.attribute 而不是record["attribute"] 来访问这些值。
    • 但这只是问题所在,它不起作用。当我尝试打印members.posts 时,我得到Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: IterBetter instance has no attribute 'posts'
    • 您的表ipb_members 是否有一个名为posts 的列?看起来您希望它自动从其他表中加载行。 web.py 为您的数据库提供了一个方便的包装器,它不是 ORM。
    • 是的,ipb_members中有一个叫posts的列(是post count,不存储实际的post内容)
    【解决方案2】:

    你试过dict(members)吗?

    【讨论】:

    • 它输出: Traceback(最近一次调用最后一次):文件“”,第 1 行,在 中 ValueError:字典更新序列元素 #0 的长度为 74; 2 是必需的
    • 从数据库中选择总是返回列表,你为什么要调用dict呢?您必须遍历选定的记录,并在每个记录上调用 dict,但我不明白这样做的目的,使用 Storage 对象更方便。
    【解决方案3】:

    iterBetter 不是很方便,因为它只能迭代一次,这里是将 iterBetter 转换为列表的代码:

    list_conv_from_db = []
    for menber in menbers:
        temp = dict()
        for key in menber:
            temp[key]=menber[key]
        list_conv_from_db.append(temp)
    

    然后你得到 list_conv_from_db 你可以做任何你想做的事!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-23
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2015-07-23
      相关资源
      最近更新 更多