Skip to main content
 首页 » 编程设计

python之查询过滤器不工作,但 GQL 是 : bug in app engine

2025年05月04日36kevingrace

无法在本地开发服务器 (1.5.0) 上重现此错误,但是当我们将代码部署到 google 时,它​​开始弹出?是目前GAE在线版本的bug吗?

问题来了。如果我们首先这样做:

proj = Project(created_by=users.User(email='test@sample.com')) 
proj.put() 
user = users.get_current_user() 
print user.email()  #this prints test@sample.com (actual email not used) 

这会获取 0 个结果:

projs = Project.all().filter('created_by', user).fetch(500) 

但这会获取实际应该获取的结果:

projs = GqlQuery("SELECT * FROM Project where created_by = USER('%s')"%user.email()).fetch(500) 

知道这里发生了什么吗?

请您参考如下方法:

正如我所看到的,您正在创建一个用户对象并将其保存到 created_by 中。 即

users.User(email='test@sample.com') 

在这里,您正在创建一个 users.User 对象,其电子邮件为“test@sample.com”。您正在将相同内容保存到项目的 created_by 中。当您将它与获取当前登录用户对象的 users.get_current_user() 进行比较时,这就是它不获取任何对象的原因。而在 gql 中,您再次使用传递的电子邮件创建一个用户对象,这显然将与项目中持久化的用户对象相匹配。

我会说你应该做这样的事情

proj = Project() 
proj.created_by  = users.get_current_user() 
proj.put() 
user = users.get_current_user() 
Project().all().filter('created_by',user).get()