سؤال

حسنا، لدي هذا الوضع:

class Posts(db.Model):
  rand1 = db.FloatProperty()
  #other models here

وهذه وحدة تحكم:

class Random(webapp.RequestHandler):
  def get(self):    
      rand2 = random.random()
      posts_query = db.GqlQuery("SELECT * FROM Posts WHERE rand1 > :rand2 ORDER BY rand LIMIT 1")
      #Assigning values for Django templating
      template_values = {
          'posts_query': posts_query,
           #test purposes
          'rand2': rand2,
          }

      path = os.path.join(os.path.dirname(__file__), 'templates/random.html')
      self.response.out.write(template.render(path, template_values))

لذلك عند إضافة كيان، يتم إنشاء تعويم عشوائي (0-1) ثم عندما أحتاج إلى الاستيلاء على كيان عشوائي أريد أن أكون قادرا على استخدام استعلام محدد بسيط. أخطاء مع:

BadArgumentError('Missing named arguments for bind, requires argument rand2',)

الآن هذا يعمل إذا ذهبت:

posts_query = db.GqlQuery("SELECT * FROM Posts WHERE rand1 > 1 ORDER BY rand LIMIT 1")

من الواضح أن استفساري خطأ؛ كيف يستخدم المرء متغير في بيان: S

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

المحلول

استبدل:

 "...WHERE rand1 > :rand2 ORDER BY rand LIMIT 1")

مع:

  "...WHERE rand1 > :rand2 ORDER BY rand LIMIT 1", rand2=rand2)

أو

  "...WHERE rand1 > :1 ORDER BY rand LIMIT 1", rand2)

انظر لمزيد من المعلومات: "فئة الاستعلام GQL"

الشيء المضحك هو أنني تعلمت للتو هذا حوالي 2 ساعة مضت: P

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top