帮助构建一对多关系的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)
没有找到相关结果
已邀请:
1 个回复
穗揣
是非常快速和高效的。 我认为您可以在面向标准化RDMBS的模型设计上有改进的余地;由于GAE不支持JOINS,因此在调用
之后,最终将导致对数据存储的访问过多,以致在取消引用时无法获取
和
属性。 你能做什么?非规范化和预取。 在
模型定义中添加
属性 预取ReferenceProperty为每个
对象检索
对象