如何处理这个Gql查询对象

时间:2013-10-10 17:08:10

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

user_exists = db.GqlQuery("select * from User where user_id in '%s'" % username)

我正在尝试进行测试以查看数据库(User)中是否已存在特定用户标识(user_id)。基本上,如果'user_exists'包​​含任何结果,我想产生错误并重新呈现表单,如果它是空的,我想继续存储用户数据。如何判断'user_exists'是否包含结果?

我试过了,

if user_exists:

但这种情况每次都会消失。也就是说,我传入的每个名字都是如此,无论它是否已经存在。

我也试过了,

if len(user_exists) > 0:

但是得到Gql查询对象没有len的错误。如果user_exists是一个Gql查询对象,我怎么能从中提取某种列表,以便按照我试图的方式检查它的内容?

我过去曾在jinja模板中使用for循环迭代这样的对象,并且我认为这个对象通常也可以被视为可迭代的,例如列表。

1 个答案:

答案 0 :(得分:3)

如果您在GqlQuery对象上调用.get().fetch(1),您的代码将会有效。

示例:

user = db.GqlQuery("select * from User where user_id = :1", username).get()
if user:
    # now `user` will contain a value if the query returns a value or None if not

您应该更喜欢使用查询参数进行字符串插值,因为使用API​​会使您的代码不易受到SQL注入攻击。