【问题标题】:How do I pass an object to a Google Datastore function in python?如何将对象传递给 python 中的 Google Datastore 函数?
【发布时间】:2021-10-11 09:54:24
【问题描述】:

我有以下代码。我想将具有名称和位置属性的博物馆对象传递给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)

11 月更新, 这就是我修复它的方法:

def create_booking(self, user, museum: Dict[str, str], date, arHr, leHr):
    task = datastore.Entity(self.client.key("Bookings"))
    if len(self.get_museum(museumname)) == 0:
        return "Museum not found", 404
    if self.get_bookings_number_by_date(museumname, date)[0] > 10:
        return "To many bookings for this date", 401
    task.update(
        {
            "user": user,
            #you need to get the properties from your dictionar
            "museum": {
                "name": museum['name'],
                "location": museum['location']
            },
            # alternatively
            "museum": museum,
            "date": date,
            "arriving hour": arHr,
            "leaving hour": leHr
        }
    )
    self.client.put(task)

【问题讨论】:

  • 您想将这些值传递给现在是 Firestore 的数据存储区吗?您是否尝试安装 SDK 并写入集合?
  • Datastore 和 Firestore 一样吗?我没有安装任何东西,我不得不制作一个小组项目,其中一个人试图设计数据库,但我们都不知道如何在创建预订时将对象作为参数传递给函数。
  • 为努力而点赞,早在他们之前就有人帮助了我。
  • @Joyce 如果您觉得以下任何答案都可能有所帮助,那么请考虑接受一个答案。它将通过提高帖子的可见性来帮助可能面临类似问题的其他社区成员。

标签: python database nosql google-cloud-datastore


【解决方案1】:

从您的代码来看,museum 似乎不是字典(因为您正在做museum.name)。这意味着您不能像在示例中那样通过它。您必须实例化它,添加属性值并传递它,例如(假设博物馆是一种类型)

museum = Museum (name=<name>, location=<location>)
create_booking(user, museum, date, arHr, leHr)

【讨论】:

    【解决方案2】:

    您可以为您的项目使用 firestore,它是谷歌云中的数据存储。 如果你已经有一个谷歌云项目,你也可以将同一个项目用于 firestore。请关注following tutorial关于如何创建服务帐号和生成密钥。

    请查看以下代码示例,了解如何创建集合、文档和更新字段。

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    
    
    # initializations 
    cred = credentials.Certificate('XXXXXXXXXXXXXXXXX.json')
    firebase_admin.initialize_app(cred)
    db = firestore.client()
    
    
    
    #adding first data
    doc_ref = db.collection('Museum_booking').document('cust1')
    
    doc_ref.set({
    
        'name':'Steve',
        'lname':'Smith',
        'location':'Florida',
        'age':24
    
    
    })
    
    
    
    #adding second data
    doc_ref = db.collection('Museum_booking').document('cust2')
    doc_ref.set({
    
        'name':'John',
        'lname':'Doe',
        'email':'john@gmail.com',
        'location':'Texas',
        'age':26
    
    
    })
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2011-01-09
      • 2021-11-26
      • 1970-01-01
      • 2022-12-05
      相关资源
      最近更新 更多