طريقة get_by_id على الطبقات النموذجي في محرك جوجل التطبيق مخزن البيانات
-
19-08-2019 - |
سؤال
وأنا غير قادر على تجريب كيف يمكنك الحصول على الكائنات من محرك جوجل التطبيق مخزن البيانات باستخدام get_by_id. هنا هو النموذج
from google.appengine.ext import db
class Address(db.Model):
description = db.StringProperty(multiline=True)
latitude = db.FloatProperty()
longitdue = db.FloatProperty()
date = db.DateTimeProperty(auto_now_add=True)
وأنا يمكن أن تخلق لهم، ووضعها، واسترجاعها مع GQL.
address = Address()
address.description = self.request.get('name')
address.latitude = float(self.request.get('latitude'))
address.longitude = float(self.request.get('longitude'))
address.put()
وعنوان المحفوظة لديها قيم
>> address.key()
aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw
>> address.key().id()
14
ويمكن أن أجد لهم باستخدام مفتاح
from google.appengine.ext import db
address = db.get('aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw')
ولكن لا يمكن العثور عليها من قبل معرف
>> from google.appengine.ext import db
>> address = db.Model.get_by_id(14)
والعنوان هو بلا، عندما أحاول
>> Address.get_by_id(14)
AttributeError: type object 'Address' has no attribute 'get_by_id'
وكيف يمكنني أن أجد من معرف؟
وتحرير: وتبين أنا أحمق وكان يحاول العثور على نموذج عنوان في وظيفة تسمى العناوين. شكرا لإجاباتك، لقد شهد براندون كما الإجابة الصحيحة كما حصل في أول وثبت جميعا أن نعمل.
المحلول
وحاولت فقط على shell.appspot.com
ويبدو أن تعمل بشكل جيد:
Google Apphosting/1.0
Python 2.5.2 (r252:60911, Feb 25 2009, 11:04:42)
[GCC 4.1.0]
>>> class Address(db.Model):
description = db.StringProperty(multiline=True)
latitude = db.FloatProperty()
longitdue = db.FloatProperty()
date = db.DateTimeProperty(auto_now_add=True)
>>> addy = Address()
>>> addyput = addy.put()
>>> addyput.id()
136522L
>>> Address.get_by_id(136522)
<__main__.Address object at 0xa6b33ae3bf436250>
نصائح أخرى
ومفتاح وهو التطبيق هو قائمة (النوع، id_or_name) الصفوف - للكيانات الجذر، دائما سوى عنصر واحد لفترة طويلة. وهكذا، فإن ID وحدها لا تحدد كيان - مطلوب أيضا نوع من الكيان. عند استدعاء db.Model.get_by_id (خ)، كنت طالبا للكيان مع مفتاح (النموذجي، خ). ما تريده هو أن ندعو Address.get_by_id (خ)، الذي يجلب الكيان مع مفتاح (عنوان، خ).
ويجب عليك استخدام نوع طويل في get_by_id ( "هنا"). يجب أن يكون نوع int رسالة خطأ.