我有一个存储在GAE中的60000对双语词典数据库,如下所示:
日期,标签,价值
日期,可见,螺丝
日期,vis,螺丝
date,visàbois,wood screw
日期,相对于指尖,锥形螺钉
date,visàbraser,braze screw
date,visàmétaux,machine screw
今天使用以下python脚本:
def get_value(self, tag):
entry = db.GqlQuery("SELECT * FROM StoredData where tag = :1", tag).get()
value = entry.value
value = unicode(value)
value = value.encode('ascii','xmlcharrefreplace')
如果我要求“相对”,我只会回复“搞砸”。
问题:
我想把“螺丝”作为第二个答案,也就是说检索所有具有相同标签的实体。
我想得到包含子串“screw”的所有实体(用户输入的最少3个字符):
螺钉,螺钉,木螺钉,锥形螺钉,铜焊螺钉,机械螺钉
=>我要用什么GQL查询在这个脚本生成的表中显示它们?
### Show the tags and values as a table.
###def show_stored_data(self):
### self.response.out.write('''
### <p><table border=1>
### <tr>
### <th>Key</th>
### <th>Value</th>
### <th>Created (GMT)</th>
### </tr>''')
### entries = db.GqlQuery(" ***GQL query n°1 or n°2*** ")
### for e in entries:
### entry_key_string = str(e.key())
### self.response.out.write('<tr>')
### self.response.out.write('<td>%s</td>' % e.tag)
### self.response.out.write('<td>%s</td>' % e.value)
### self.response.out.write('<td><font size="-1">%s</font></td>\n' % e.date.ctime())
### self.response.out.write('''
### <td><form action="/deleteentry" method="post"
### enctype=application/x-www-form-urlencoded>
### <input type="hidden" name="entry_key_string" value="%s">
### <input type="hidden" name="tag" value="%s">
### <input type="hidden" name="fmt" value="html">
### <input type="submit" style="background-color: red" value="Delete"></form></td>\n''' %
### (entry_key_string, e.tag))
### self.response.out.write('</tr>')
### self.response.out.write('</table>')
非常感谢您的帮助。
菲利普
答案 0 :(得分:0)
Here是您的问题 - 您在.get()
对象上使用GqlQuery
方法。文档说:
调用查询的
get()
方法,以获取数据存储区中找到的第一个匹配实体:
如果你这样做:
def get_value(self, tag):
entries = db.GqlQuery("SELECT * FROM StoredData where tag = :1", tag).get()
for entry in entries:
value = entry.value
value = unicode(value)
value = value.encode('ascii','xmlcharrefreplace')
print value
我希望你会看到你同时获得screw
和screws
。
至于用"screw"
获取所有字符串,这将比你讨价还价要困难得多。看看this SO question。有些答案建议您使用SearchableModel
。
对于vis à <blank>
这样的示例,如果您知道该词组始终以相关的子标签开头,您可以使用>
和<
来获取您的内容正在寻找,也许看看标签是否在vis
和vis zzzzzzz
之间,或者沿着这些方向 - 我不是100%清楚GQL的字符串排序顺序,我找不到现在的文件。
答案 1 :(得分:0)