帮助构建一对多关系的GQL查询

|| A]问题摘要: 我的项目中有一对多数据模型。我需要构造查询以基于“一个”侧面数据对象的键来获取“许多”侧面数据对象的帮助。 请参阅\“ EDIT#1 \”以获取有效的代码,但仍然效率低下。 B]问题详细信息: 1]我有“ UserReportedCountry”(一个)到“ UserReportedCity”(很多),“ UserReportedCity”(一个)到“ UserReportedStatus”(很多)数据模型关系。 2] UserReportedCountry的密钥是country_name,例如-“ unitedstates”。 UserReportedCity的密钥是country_name:city_name,例如“ unitedstates:boston”。 UserReportedStatus没有特殊的键名。 3]我的python代码中包含用户的国家和城市名称,我想基于城市密钥名称“ county_name:city_name”检索所有“ UserReportedStatus”对象 C]代码节选: 1]数据库模型:
class UserReportedCountry(db.Model):
  country_name = db.StringProperty( required=True,
                          choices=[\'Afghanistan\',\'Aring land Islands\']
                         )

class UserReportedCity(db.Model):
  country = db.ReferenceProperty(UserReportedCountry, collection_name=\'cities\')
  city_name = db.StringProperty(required=True)   

class UserReportedStatus(db.Model):
  city = db.ReferenceProperty(UserReportedCity, collection_name=\'statuses\')
  status = db.BooleanProperty(required=True)
  date_time = db.DateTimeProperty(auto_now_add=True)
2]到目前为止我尝试过的查询:
def get_data_for_users_country_and_city(self,users_country,users_city):
    key_name_for_user_reported_city = users_country + \":\" + users_city
    return UserReportedStatus.all().filter(\'city.__key__=\', key_name_for_user_reported_city ).fetch(limit=10)
D]正在使用的技术 1] Python 2] Google App引擎 3] Django 4] Django模型。 [EDIT#1] 我尝试了以下机制根据给定的城市和国家/地区查询状态对象。这已经奏效,但是我认为这是执行任务的低效机制。
def get_data_for_users_country_and_city(self,users_country,users_city):
    key_name_for_user_reported_city = users_country + \":\" + users_city
    city_object = UserReportedCity.get_by_key_name( key_name_for_user_reported_city )
    return UserReportedStatus.gql(\'WHERE city=:1\', city_object)
已邀请:
您的上一个查询看起来正确,我看不出效率低下的任何问题;实际上,查询
by_key_name
是非常快速和高效的。 我认为您可以在面向标准化RDMBS的模型设计上有改进的余地;由于GAE不支持JOINS,因此在调用
get_data_for_users_country_and_city
之后,最终将导致对数据存储的访问过多,以致在取消引用时无法获取
city_name
country_name
属性。 你能做什么?非规范化和预取。 在
UserReportedCity
模型定义中添加
country_name
属性 预取ReferenceProperty为每个
UserReportedStatus
对象检索
UserReportedCity
对象

要回复问题请先登录注册