我无法通过查询获取实体

时间:2011-09-15 02:31:24

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

我使用的是与之前项目中使用的相同的程序,我从Google提供的教程中学到了,但这次我没有得到任何结果..

我的代码是从我的数据存储中获取3个随机笑话,它只保留100个笑话&将它们显示在HTML表格中。

这是我的模特:

class joke(db.Model):
jokeID = db.IntegerProperty()
content = db.TextProperty()

这是我的控制器中的代码,我正在获取实体:

def get(self):
deck = range(1, 101)
shuffle(deck)
items = list()
itemCounter = 0
for jokeNumber in deck:
    itemCounter += 1
    if itemCounter <= 3:
        self.response.out.write(jokeNumber)
        # I tried with fetching from the model & with GqlQuery
        #items.append(joke.all().filter('jokeID=',jokeNumber).fetch(1))
        items.append(db.GqlQuery("SELECT * FROM joke WHERE jokeID=:1",jokeNumber))
    else:
        break
template_values = {'items' : items}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path,template_values))

&安培;这里是我用控制器中的数据填充HTML表格的地方:

<table border="0" width="800px">
     {% for item in items %}
      <form method="post" action="/ocena">
          <tr>
            <td>
                {{ item.content }}
            </td>
          </tr> 
       </form>
     {% endfor %}
   </table>

在网站的源代码中,我得到三个空单元格,但是当我从GAE在数据存储区查看器中执行查询时,我得到了所需的结果..

2 个答案:

答案 0 :(得分:2)

我已经检查了你的例子,这段代码对我有用:

def get(self):
    deck = range(1, 101)
    shuffle(deck)
    items = db.GqlQuery("SELECT * FROM joke WHERE jokeID IN :1", deck[:3])
    template_values = {'items' : items}
    path = os.path.join(os.path.dirname(__file__), 'index.html')
    self.response.out.write(template.render(path,template_values))

答案 1 :(得分:-1)

  

我的代码是3随机

def get_random_joke(self, category):
    jokeinfo = JokeData.all().filter("category =", category)
    return jokeinfo[random.randint(0, jokeinfo.count()-1)] 

我认为如果您有类别,上面的代码可以从数据存储区中的类别中获取一个随机笑话。