正在从切换数据库引用属性使用Google应用引擎访问ndb?

2024-09-30 16:31:34 发布

您现在位置:Python中文网/ 问答频道 /正文

今天我在这里读了一篇关于如何在GAE restapi中使用一对多关系的文章。你知道吗

https://cloud.google.com/appengine/articles/modeling

我认为这很简单,但后来我意识到我使用的是ndb而不是db,所以我不能使用数据库引用属性. 你知道吗

这是我的路线模型

class Route(ndb.Model):

  driver_id = ndb.IntegerProperty()
  requester_id = ndb.IntegerProperty()
  startpoint = ndb.GeoPtProperty(required=True)
  endpoint = ndb.GeoPtProperty(required=True)
  regular = ndb.BooleanProperty(required=True)
  date_and_time = ndb.DateTimeProperty(required=True)
  places_available = ndb.IntegerProperty()
  val_lift = ndb.IntegerProperty()

这里我有我的模型RegularDays,如果接收到的JSON中的Regular是真的,那么将使用它

class RegularDays(ndb.Model):

  route = db.ReferenceProperty(Route,
                                   collection_name='regular_days')
  Monday = ndb.BooleanProperty(required=True)
  Tuesday = ndb.BooleanProperty(required=True)
  Wednesday = ndb.BooleanProperty(required=True)
  Thursday = ndb.BooleanProperty(required=True)
  Friday = ndb.BooleanProperty(required=True)
  Saturday = ndb.BooleanProperty(required=True)
  Sunday = ndb.BooleanProperty(required=True)

所以我要做的就是这样。你知道吗

if newroute.regular:
                RegularDays(route=newroute,
                    Monday=route_json['Days']['Monday'],
                    Tuesday=route_json['Days']['Tuesday'],
                    Wednesday=['Days']['Wednesday'],
                    Thursday=route_json['Days']['Thursday'],
                    Friday=route_json['Days']['Friday'],
                    Saturday=route_json['Days']['Saturday'],
                    Sunday=route_json['Days']['Sunday']).put()

但是现在我对如何修改这个代码使其与NDB一起工作感到非常困惑。你知道吗

谢谢你的帮助


Tags: jsontruerequireddaysroutendbmondayfriday
1条回答
网友
1楼 · 发布于 2024-09-30 16:31:34

ndb中的等价物是^{}

Datastore key

Optional keyword argument: kind=kind, to require that keys assigned to this property always have the indicated kind. May be a string or a Model subclass.

您会发现,在您的示例中,只需替换属性名就足够了,但关键字collection_name将不再起作用:这是因为旧的ReferenceProperty在幕后为您做了一些工作,在引用的类中创建了一个查询属性,以使您的生活更轻松,但它被放到了ndb,选择一种更明确的方法,只存储密钥,让您担心实现细节。你知道吗

如果您想知道的话,这种更改的原因是自动属性非常容易使用,以至于忽略真正发生的事情(看不见,想不到)是很常见的,并且最终会导致大量额外的工作和查询,而这些工作和查询在优化时非常耗时。你知道吗

这对你来说意味着不是写这句话:

for phone in scott.phone_numbers:

您必须自己编写phone_numbers查询代码:)

相关问题 更多 >