【问题标题】:web.py database select accessweb.py 数据库选择访问
【发布时间】:2012-03-22 14:07:23
【问题描述】:

我最近一直在搞乱 web.py,想从数据库中获取一些东西,然后它返回给我一个“存储”对象。我用来调用我的信息的代码是:

db = web.database(dbn='sqlite', db='sqlfile.sqlite')
sely = db.select('carp', order="id ASC")

当 sely 运行时,它会像这样让我退出文本:

<Storage {'lvl': 0, 'symbol': u'formb', 'logged': u'false', 'id': 1, 'display': u'Classic'}>

当您打印出来时,存储线就会出来。我怎样才能从这个对象中取出字典?

【问题讨论】:

    标签: python web.py


    【解决方案1】:

    处理未知 API 的一般 Python 技巧是使用 dir builtin。在解释器中尝试dir(sely),看看你得到的对象定义了哪些成员变量和函数。

    • 如果您看到类似__iter__ 的内容,您可以调用list(sely) 将结果转换为列表,并通常在循环中迭代对象。
    • 如果您看到类似__getitem__ 的内容,那么您可以索引到该对象并希望返回一个值。

    作为旁注,我刚刚尝试了您的代码,我得到 sely 成为 web.utils.IterBetter 实例(它返回 0 行,而不是在我的情况下预期的 3 行)。所以我无法真正重现您的问题(但可以说是我自己的问题)。

    【讨论】:

      【解决方案2】:
      db = web.database(dbn='sqlite', db='sqlfile.sqlite')
      sely = db.select('carp', order="id ASC").list()
      

      sely 将是存储的liststoragedict 相同,但您可以使用obj.key 而不是obj["key"] 访问参数。您可以通过dict(obj)storage 转换为dict

      【讨论】:

        【解决方案3】:

        在窗口中

        return list(db.select('top',what='score',where="name = $id",vars=locals())

        没问题。你可以得到分数的值。

        但是

        在ubuntu中

        你应该这样做

        db.select('top',what='score',where="name = $id",vars=locals())[0]["score"]

        我不知道为什么,但它可以在我的电脑上运行

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多