Python中如何向Google Datastore相关函数传递对象参数
博物馆预约函数传参实现方案
问题描述
需要将携带name、location属性的博物馆对象传入create_booking函数,最初尝试用create_booking(user, {name, location}, date, arHr, leHr)的方式调用时出现问题,原有代码如下:
@staticmethod def create_booking(user, museum, date, arHr, leHr): task = datastore.Entity(DB.client.key("Bookings")) if len(DB.get_museum(museum.name)) == 0: return "Museum not found", 404 if DB.get_bookings_number_by_date(museum.name, date)[0] > 10: return "To many bookings for this date", 401 task.update( { "user": user, "museum": { "name": name, "location": location }, "date": date, "arriving hour": arHr, "leaving hour": leHr } ) DB.client.put(task)
问题原因
原有代码存在两处核心问题:
- 入参如果是字典类型的museum对象,不能用
museum.name的点语法读取属性,应该用字典取值方式museum['name'] - 存入数据时直接引用了未定义的
name、location变量,没有从传入的museum参数中取值
最终修复方案
调整后的代码如下(已修正原修复代码中museumname的笔误):
def create_booking(self, user, museum: Dict[str, str], date, arHr, leHr): task = datastore.Entity(self.client.key("Bookings")) if len(self.get_museum(museum['name'])) == 0: return "Museum not found", 404 if self.get_bookings_number_by_date(museum['name'], date)[0] > 10: return "To many bookings for this date", 401 task.update( { "user": user, # 方式1:显式从字典取对应字段组装 "museum": { "name": museum['name'], "location": museum['location'] }, # 方式2:如果入参museum结构符合存储要求,可直接赋值 # "museum": museum, "date": date, "arriving hour": arHr, "leaving hour": leHr } ) self.client.put(task)
调用示例
直接传入符合结构的博物馆字典即可:
museum_dict = {"name": "自然博物馆", "location": "北京市东城区"} create_booking(user, museum_dict, "2024-12-01", 9, 16)
内容的提问来源于stack exchange,提问作者Joyce
相关产品推荐
相关产品推荐

