문제

읽기: http://code.google.com/appengine/docs/python/datastore/gqlreference.html

내가 사용하려면:

:=에

하지만 어떻게 작동합니다.가정하자 다음

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)

하지만 가져오는 나의 목록을 키를 사용합니다.고 싶어 이제는 목록에 그것을 얻을 쿼리를 얻을 수 str 분야의 UniqueListOfSavedItems.나는 생각을 할 수 있습니다.

q2 = db.Gql("SELECT * FROM UniqueListOfSavedItems WHERE := str in q")

하지만 뭔가가 바로...어떤 아이디어가?그것은(이에 제일 작업,그래서 테스트 할 수 없습니다 이제):

q2 = db.Gql("SELECT * FROM UniqueListOfSavedItems __key__ := str in q)

side note:what 지독하게 어려운 문제에서 검색하기 때문에 모든 내가 정말 걱정"에서"연산자입니다.

도움이 되었습니까?

해결책

때문에 당신의 목록을 가지고,당신을 할 필요가 없이 두 번째는 쿼리를 할 수 있는 배치를 가져옵니다.이것을 보십시오:

#and this should get me the items that a user saved
useritems = db.get(saveditemkeys)

(참고도 필요하지 않은 경비 절-db.에 0 체 단락 appropritely.)

의 차이점은 무엇일까요?론,db.을 얻을은 약 20-40ms.쿼리,다른 한편으로는(GQL 또는지)약 160-200ms.하지만 잠시,그것은 더 나빠!에서는 운전자를 구현에서는 Python 및 변환하는 여러 쿼리는 직렬로 실행됩니다.그래서 당신이 할 경우 쿼리에 대한 필터 10 키,당신이 하고 있는 10 개의 160ms-틱 쿼리 작업,총 약 1.6 초 대기 시간이 길어집니다.단일 db.을 얻을 대조적으로,동일한 영향을 미칠 것입니다 및에 대한 총 30ms.

다른 팁

+1 이 아담을 얻기 위해 나에게 오른쪽에는 트랙에 있습니다.에 따라 자신의 포인터,그리고 일부에서 검색드 검색,나는 다음과 같은 솔루션입니다.

usersaveditems = User.Gql(“Select * from UserListOfSavedItems where user =:1”, userkey)

saveditemkeys = []

for item in usersaveditems:
    #this should create a list of keys (references) to the saved item table
    saveditemkeys.append(item.str())    

if len(usersavedsearches > 0):
    #and this should get me the items that a user saved
    useritems = db.Gql(“SELECT * FROM UniqueListOfSavedItems WHERE __key__ in :1’, saveditemkeys)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top