سؤال

لديّ كيان به مجموعة من الراهبات الذاتي وأردت البحث مع شرط على مفتاح حقل Selfref. نيتي هي تقليل زيارات DB عن طريق إنشاء قائمة بالمفاتيح ، ثم التكرار على نفس الكيان لبناء قائمة متداخلة. أنا أستخدم هذه القائمة للضغط على memcache.get_multi () للحصول على إصدار قاموس مخبأة من النتائج التي أريد العودة إليها. فيما يلي نسخة مختصرة من Entitiy:

class Link(db.Model):     
    member = db.ReferenceProperty(Member)     
    url = db.TextProperty()   
    title = db.StringProperty()   
    category =db.SelfReferenceProperty()

لقد قمت ببناء قاموس مفتاح "فئة" استنادًا إلى كيان آخر يخزن معلومات الوصول. ما أريد فعله هو شيء مثل:

for categoryKey in accessDict:  
    categoryDBKey = db.Key(categoryKey)  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category.key() = :1',categoryDBKey )  

for qItem in q:  
    cacheList.append('Link_' + str(qItem))  
    dataCache = memcache.get_multi(cacheList)

لكنني أحصل على خطأ "Badqueryerror: Error Error: Enalid Where Condition".

أعلم أنه يمكنني فقط تمرير كيان الفئة بأكمله في:

for categoryKey in accessDict:  
    category = db.ket(db.Key(categoryKey))  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1',category)

ولكن يبدو أن RPCs ضائعة إذا كان لدي بالفعل القيمة الرئيسية للفئة التي أرغب في تصفيةها.

هل هناك طريقة لاستخدام شرط على مفتاح المرجع؟

شكرًا

هل كانت مفيدة؟

المحلول

يتم تخزين الخصائص المرجعية كمفاتيح ، بحيث يمكنك مقارنتها مباشرة:

for categoryKey in accessDict:  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1', db.Key(categoryKey))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top