在python中查询数据存储区

时间:2010-05-06 15:34:51

标签: google-app-engine google-cloud-datastore

问候!

我正在尝试使用datatstore中的单个列,我可以查看和显示内容,如下所示:

q = test.all()
q.filter("adjclose =", "adjclose")
q = db.GqlQuery("SELECT * FROM test")

results = q.fetch(5)
for p in results:
    p1 = p.adjclose     
    print "The value is --> %f" % (p.adjclose)

但是我需要用adjclose列计算历史值,我无法克服错误

for c in range(len(p1)-1):
    TypeError: object of type 'float' has no len()

这是我的代码!

for c in range(len(p1)-1):
    p1.append(p1[c+1]-p1[c]/p1[c])
    p2 = (p1[c+1]-p1[c]/p1[c])
    print "the p1 value<--> %f" % (p2)
    print "dfd %f" %(p1)

python的新手,非常感谢任何帮助!

提前致谢

这是完整的代码

class CalHandler(webapp.RequestHandler):

    def get(self):
        que = db.GqlQuery("SELECT * from test")
        user_list = que.fetch(limit=100)

        doRender(
            self,
            'memberscreen2.htm',
            {'user_list': user_list} )


q = test.all()
q.filter("adjclose =", "adjclose")
q = db.GqlQuery("SELECT * FROM test")

results = q.fetch(5)
for p in results:
    p1 = p.adjclose     
    print "The value is --> %f" % (p.adjclose)
    for c in range(len(p1)-1):
        p1.append(p1[c+1]-p1[c]/p1[c])
        print "the p1 value<--> %f" % (p2)
        print "dfd %f" %(p1)

2 个答案:

答案 0 :(得分:0)

我会这样做:

for c in xrange(p1-1)

基本上,听起来p1已经包含了len,所以你可以直接使用它。另请注意,使用xrange函数通常比range快一点。原因是xrangerange构建列表时返回迭代器。换句话说,如果你做range(1000000),它将创建一个包含一百万个整数的列表!

答案 1 :(得分:0)

错误告诉您绑定到p1的值没有长度。这是有道理的,因为它是一个浮点数(也在错误信息中)。

我怀疑您输入的内容是p而不是p1。这是为什么不应该使用无意义的变量名称的一个很好的例子。如果名称类似于current_result(而不是p)和current_adjclose而不是p1,则会更容易发现。

看起来你可能正在尝试在内循环中进行某种转换(由于变量名称,它不是100%清晰)。如果是这样,那你就急于使用list comprehension

此外,看起来您可能正在尝试重用变量;别。毕竟,它们并不缺乏,而且很难选择有意义的变量名称。