首页 > 编程问答 >如何使用 Python 打开 Google Firestore 上的特定数据库?

如何使用 Python 打开 Google Firestore 上的特定数据库?

时间:2024-07-24 05:02:37浏览次数:10  
标签:python firebase google-cloud-platform google-cloud-firestore

我正在使用 Firebase 并使用以下代码从 Firestore 设置/检索文档:

import firebase_admin
from firebase_admin import credentials, firestore

cred = credentials.ApplicationDefault()
firebase_admin.initialize_app(cred, options={"projectId": "huq-jimbo"})
firestore_client = firestore.client()
doc = firestore_client.collection(f"example_collection").document("data")
print(doc)

我只能访问 (default) 数据库,并且看不到任何打开不同数据库的方法。

查看文档(例如 https://firebase.google.com/docs/firestore/quickstart )似乎没有 database 参数 firestore.client()

我怎样才能实现这一目标?


在 Google Firestore 中, 没有“数据库” 的概念,至少不像你在处理传统的关系型数据库管理系统(如 MySQL 或 PostgreSQL)时那样。Firestore 是一个 NoSQL 文档数据库,它以完全不同的方式组织数据。

你所指的 (default) 实际上是指你的 Firebase 项目 ,而不是数据库。每个 Firebase 项目在 Firestore 中都有一个默认的数据库实例。你无法在一个项目中创建多个 Firestore 数据库。

你当前使用 firestore.client() 创建的客户端 已经连接到了你项目中的默认 Firestore 实例

现在,让我们来谈谈你可能想要实现的目标:

如果你想在不同的 Firebase 项目中访问 Firestore 数据,你需要使用该项目的凭据初始化一个新的 Firebase 应用:

import firebase_admin
from firebase_admin import credentials, firestore

# 项目 1
cred_1 = credentials.ApplicationDefault()
firebase_admin.initialize_app(cred_1, name="project1", options={"projectId": "project1-id"})
firestore_client_1 = firestore.client(app="project1")

# 项目 2
cred_2 = credentials.Certificate("path/to/project2-credentials.json")
firebase_admin.initialize_app(cred_2, name="project2", options={"projectId": "project2-id"})
firestore_client_2 = firestore.client(app="project2")

# 现在你可以使用 firestore_client_1 和 firestore_client_2 分别访问两个项目的 Firestore 数据

如果你想在同一个 Firebase 项目中组织你的数据,你应该使用集合和子集合:

Firestore 使用集合和文档来组织数据。你可以将集合视为文档的容器。你可以在集合中创建多个文档,也可以在文档中嵌套子集合来创建层次结构。

例如,你可以创建一个名为 customers 的集合,并在其中为每个客户创建一个文档。然后,你可以在每个客户文档中创建一个名为 orders 的子集合来存储他们的订单。

# 在 "customers" 集合中创建一个名为 "customer1" 的文档
customer_ref = firestore_client.collection("customers").document("customer1")

# 在 "customer1" 文档中创建一个名为 "orders" 的子集合
orders_ref = customer_ref.collection("orders")

通过使用集合、子集合和文档,你可以在 Firestore 中有效地组织和管理你的数据,而无需使用多个数据库。

标签:python,firebase,google-cloud-platform,google-cloud-firestore
From: 77571877

相关文章

  • 如何使用 Python 和 Numpy 重现 Matlab 文件读取以解码 .dat 文件?
    我有一个Matlab脚本,可以读取编码的.dat文件,对其进行解码并保存。我试图使用numpy将其转换为Python。我发现对于同一个文件,我得到不同的输出结果(python数字没有意义)。该代码最初作为从串行端口读取的脚本的一部分运行,因此是数据的结构。我首先认为位移是问题所在,因为......
  • 在Python中调整pdf页面大小
    我正在使用python裁剪pdf页面。一切正常,但如何更改页面大小(宽度)?这是我的裁剪代码:input=PdfFileReader(file('my.pdf','rb'))p=input.getPage(1)(w,h)=p.mediaBox.upperRightp.mediaBox.upperRight=(w/4,h)output.addPage(p)当我裁剪页面时,我也需要......
  • 如何使用 python 更改资源管理器窗口中的路径?
    没有人知道如何在不使用python打开新实例的情况下更改资源管理器窗口中的当前路径吗?例如,如果用户使用C:\Users\User打开资源管理器窗口。然后我必须将该路径更改为C:\Windows\System32例如。提前致谢。很遗憾,无法直接使用Python更改现有文件资源管理器窗口的......
  • python 以及将数组传递给函数的问题
    我需要求解一些常微分方程$\frac{dy}{dx}=f(x)=x^2ln(x)$并继续在限制0之间创建数组xpt。<=xpt<=2因为我必须小心xpt=0,所以我将函数定义如下deff(x):ifx<=1.e-6:return0.else:returnnp.square(x)*np.log(x)我的调用程序读取Np......
  • 如果 Python 脚本正在使用文件夹,如何在文件资源管理器中进行更改时防止 Windows 的“
    我有一个简单的脚本,显示在QTreeView中的QListView中选择的目录的内容,我想添加打开文件资源管理器的功能,以让用户编辑目录内的内容。但是,添加新的文件夹和文件可以,但删除或移动文件夹或文件会提示“文件夹正在使用”错误:此操作无法完成,因为该文件已在另一个程......
  • 如何使用 Python API 获取每个模型的活跃用户列表、最后登录信息
    我想通过PythonAPI获取我的dbt项目的所有模型中的活动或非活动用户列表。这可能吗?我尝试列出模型,但无法获取用户信息,如用户名、项目、以及上次活动或上次登录。不幸的是,dbt本身并不跟踪你所寻找的用户活动数据(最后登录、活跃用户等)。dbt的主要功能是转换数据,而不......
  • Python tkinter 窗口不断关闭,我不知道为什么
    我正在尝试制作一个有趣的小程序,其中每小时左右就会有一只毛茸茸的动物走过屏幕。我有一个主窗口,它启动一个循环,每小时左右播放一次动画/声音,但是在口袋妖怪第一次完成行走后,整个程序就会结束。我认为这可能与我设置tkinter窗口的方式有关,但我无法弄清楚。我认为在这里包含......
  • 用于自动访问 MongoDB Atlas CLI 的 Python 脚本
    我想编写一个Python脚本,以便普通用户可以访问他的数据库并从他的终端执行CRUD操作。我正在查看官方文档,但我有点迷失。有人可以给我指点基本教程来开始吗?当然,以下是如何构建Python脚本来访问MongoDBAtlasCLI的基本教程:先决条件:MongoDBAtlas......
  • Python实现简单学生登陆系统
     代码:importhashlibclassStudent:def__init__(self,username,password):#初始化学生对象,存储用户名和加密后的密码self.username=usernameself.password=hashlib.sha256(password.encode()).hexdigest()defcheck_passwo......
  • python猜数字游戏
    好的,下面是一个简单的小游戏代码示例,使用Python编写。这个游戏是一个猜数字游戏,玩家需要猜一个1到100之间的随机数。importrandomdefguess_number_game():print("欢迎来到猜数字游戏!")print("我已经想好了一个1到100之间的数字,请你猜一猜。")secret_num......