gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:31:22 25 4
gpt4 key购买 nike

A]问题摘要:

我的项目中有一对多数据模型。我需要帮助构建一个查询,以根据“一个”侧数据对象的键获取“多”侧数据对象。

请参阅“EDIT#1”以获取已运行但仍然低效的代码。

B] 问题详细信息:

1] 我有“UserReportedCountry”(一个)到“UserReportedCity”(多个)、“UserReportedCity”(一个)到“UserReportedStatus”(多个)数据模型关系。

2] UserReportedCountry 的键是country_name,例如“unitedstates”。UserReportedCity 的键是国家/地区名称:城市名称,例如“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 应用引擎

3] Django

4] Django 模型。

[编辑#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_namecountry_name 属性:解除引用。

你能做什么? 反规范化预取

  1. UserReportedCity 模型定义中添加 country_name 属性
  2. Prefetch ReferenceProperty 检索每个 UserReportedStatus 对象的 UserReportedCity 对象

关于python - 帮助构建一对多关系的 GQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5710368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com