所以说我创建了一个实体
def create_entity_from_key(kind: str, value) -> datastore.Entity:
return datastore.Entity(key=datastore_client.key(kind, value))
def create_driver_entity(entity: datastore.Entity, name: str,
stat_totals: dict, team: str) -> datastore.Entity:
entity.update({
'name': name,
'stat_totals': stat_totals,
'team': team
})
return entity
def create_driver_stats(age:int, pole_positions: int, race_wins: int, points_scored: int, world_titles: int, fastest_laps: int) -> dict:
driver_stats = {
'age': int(age),
'pole_positions': int(pole_positions),
'race_wins': int(race_wins),
'points_scored': int(points_scored),
'world_titles': int(world_titles),
'fastest_laps': int(fastest_laps)
}
return driver_stats
#get the values
name = request.form['name-tf']
age = request.form['age-tf']
#get rest of the values in the same way
#create the entity
entity = create_entity_from_key('driver', name)
#create the stats
stats = create_driver_stats(age, plpos, rcwin, ptscr, wdttl, fstlp)
#create the entity
create_driver_entity(entity, name, stats, rctem)
#put the entity into datastore
datastore_client.put(entity)
当我尝试使用过滤器获取实体时,我得到了错误的实体。即下面的代码没有按预期工作
attr = request.form['attr']
value = request.form['value']
#check if value is digit if it is, convert
if value.isdigit():
value = int(value)
query = datastore_client.query(kind=kind_type)
#attr would be 'stat_totals.age' for example. I have confirmed that the correct string is being used
query.add_filter(attr, ">=", str(value))
result = query.fetch()
return result
当我检查数据存储时,这就是我发现的
{
"properties": {
"race_wins": {
"integerValue": "9"
},
"pole_positions": {
"integerValue": "9"
},
"points_scored": {
"integerValue": "9"
},
"world_titles": {
"integerValue": "9"
},
"age": {
"integerValue": "9"
},
"fastest_laps": {
"integerValue": "9"
}
}
}
我不太确定出了什么问题。我认为这是因为数字周围的引号。所以我尝试删除它们,但是一旦我保存了实体,引号又回来了。 我只需要能够为数值添加过滤器并获得预期的结果。
我试过对 str 和 int 进行类型转换。
如果我使用
query.add_filter(stat_totals.age, ">=", 9)
行,我希望只获得年龄 > 9 的实体。相反,我得到更多,我认为这是因为过滤器正在比较字符串。