python – App Engine数据存储区IN运算符 – 如何使用?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – App Engine数据存储区IN运算符 – 如何使用?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1518字,纯文字阅读大概需要3分钟。
内容图文
阅读:http://code.google.com/appengine/docs/python/datastore/gqlreference.html
我想用:
:= IN
但我不确定如何使它工作.我们假设如下
class User(db.Model):
name = db.StringProperty()
class UniqueListOfSavedItems(db.Model):
str = db.StringPropery()
datesaved = db.DateTimeProperty()
class UserListOfSavedItems(db.Model):
name = db.ReferenceProperty(User, collection='user')
str = db.ReferenceProperty(UniqueListOfSavedItems, collection='itemlist')
如何进行查询以获取用户保存的项目列表?显然我可以这样做:
q = db.Gql("SELECT * FROM UserListOfSavedItems WHERE name :=", user[0].name)
但这给我一个关键列表.我现在想要获取该列表并将其放入查询中以从UniqueListOfSavedItems中获取str字段.我以为我能做到:
q2 = db.Gql("SELECT * FROM UniqueListOfSavedItems WHERE := str in q")
但是有些事情不对……任何想法?是(我在我的日常工作,所以现在不能测试):
q2 = db.Gql("SELECT * FROM UniqueListOfSavedItems __key__ := str in q)
旁注:要搜索的是一个非常难以解决的问题,因为我真正关心的是“IN”运算符.
解决方法:
由于您有一个键列表,因此您无需进行第二次查询 – 您可以进行批量提取.试试这个:
#and this should get me the items that a user saved
useritems = db.get(saveditemkeys)
(注意,你甚至不需要保护子句 – 0个实体上的db.get被适当地短路.)
你可能会问,有什么区别?好吧,db.get需要大约20-40ms.另一方面,(GQL与否)查询大约需要160-200ms.但等等,它变得更糟! IN运算符在Python中实现,并转换为多个查询,这些查询是串行执行的.因此,如果您使用IN过滤器对10个密钥进行查询,那么您将执行10次单独的160ms-ish查询操作,总共大约1.6秒的延迟.相比之下,单个db.get将具有相同的效果,总共需要大约30ms.
内容总结
以上是互联网集市为您收集整理的python – App Engine数据存储区IN运算符 – 如何使用?全部内容,希望文章能够帮你解决python – App Engine数据存储区IN运算符 – 如何使用?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。