You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:06:03