<\/script>')

Create GQL with "IN" Query for ReferenceProperty

class Message (db.Model):

user = db.ReferenceProperty(User, required=True, collection_name='Message_set')  
text = db.TextProperty(required=True)

I tried this, but get a BadValueError in the gql statement.

users = []

users.append (USERA)

users.append (UserB)

users.append (userC)

messages = Message.gql ('Where user In: users', users = users) .fetch (100)

+3
source share
4 answers

It's hard to say without a full stacktrace (please?), But I would suggest that IN does not like to pass entities, not keys. Try the following:

users = [userA.key(), userB.key(), userC.key()]
messages = Message.gql("WHERE user in :users", users=users).fetch(100
+2
source

IN GQL Python , = - , , ( ). , API Python ( , Java API), . (Btw, != ).

, , , , - , datastore.MultiQuery, datastore.Query - , Python , Python, GAE? SDK google/appengine/api/datastore.py, MultiQuery - ( , , , t, , ).

+2

:

class MyUsuario(db.Model):
    nombre=db.StringProperty(required=True)

class Message(db.Model):
    MyUsuario = db.ReferenceProperty(MyUsuario, required=True, collection_name='Message_set')  
    text = db.StringProperty(required=True)

:

from modelos import MyUsuario, Message
from google.appengine.ext import db

usuarios=MyUsuario.all()

userA=usuarios[0]
userB=usuarios[1]
userC=usuarios[2]

usuarios= []

usuarios.append(userA.key())
usuarios.append(userB.key())
usuarios.append(userC.key())

messages = db.GqlQuery('select * from Message Where MyUsuario In :usuari', usuari=usuarios)

for message in messages:
    print message.text

awnser google

+1

, ? users.append(userA.key()). .

0
source

Source: https://habr.com/ru/post/1714186/


All Articles