首页 > 编程问答 >适用于 Python 的 Firebase-admin sdk 引发错误“StreamGenerator”不可迭代

适用于 Python 的 Firebase-admin sdk 引发错误“StreamGenerator”不可迭代

时间:2024-07-25 12:52:27浏览次数:14  
标签:python google-cloud-firestore firebase-admin

以前(一周前)我与 Firestore 通信的 Python 代码工作得很好。但今天我又开始研究它,它在迭代 collection.stream()

    service_account = credentials.Certificate('credential/serviceAccount.json')
    firebase_admin.initialize_app(service_account)

    firestore_db = firestore.client()

    docs = firestore_db.collection("FeatureCollection").stream()
    for doc in docs:
        print(doc)

时引发错误 for doc in *docs* 错误在 "StreamGenerator" is not iterable "__next__" method not defined on type "DocumentSnapshot" 处引发。 错误是

doc = firestore_db.collection("FeatureCollection").document("geom1").get()

此外,每当我执行文档请求时,例如

# Error
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1721882710.133005 19720588 config.cc:230] gRPC experiments enabled: call_status_override_on_cancellation, event_engine_dns, event_engine_listener, http2_stats_fix, monitoring_experiment, pick_first_new, trace_record_callops, work_serializer_clears_time_cache
I0000 00:00:1721882710.140969 19720588 check_gcp_environment_no_op.cc:29] ALTS: Platforms other than Linux and Windows are not supported

错误信息“'StreamGenerator' is not iterable”表明你尝试迭代的对象(在本例中为 collection.stream() 的结果)不是可迭代的。尽管它的名称可能暗示了这一点,但 stream() 方法在 Python 的 Firebase Admin SDK 中不返回迭代器。它返回一个 StreamGenerator ,它是一个 grpc 对象,不用于直接迭代。

以下是解决此问题的方法以及可能导致错误“' next ' method not defined on type 'DocumentSnapshot'”消息的原因:

  1. 使用 get() 获取所有文档:

如果你想从集合中获取所有文档,最简单的方法是使用 get() 方法,它返回 DocumentSnapshot 对象的列表:

python docs = firestore_db.collection("FeatureCollection").get() for doc in docs: print(doc.to_dict())

此代码将:

  • 获取 FeatureCollection 集合中的所有文档。
  • 迭代检索到的 DocumentSnapshot 对象列表。
  • 对于每个文档,打印其数据(作为字典)。

  • 使用 stream() 进行流式传输(如果你需要):

stream() 方法用于处理大量文档,你希望避免一次性将所有文档加载到内存中。如果你需要这种流式传输行为,则需要以不同的方式使用它:

python docs = firestore_db.collection("FeatureCollection").stream() for doc in docs: print(doc.to_dict())

在此代码中,我们不直接迭代 docs stream() 方法返回一个生成器,因此 for 循环会为流中的每个文档调用 next() ,有效地逐个处理它们。

关于“' next ' method not defined on type 'DocumentSnapshot'”错误:

此错误表明你正在尝试在一个 DocumentSnapshot 对象上调用 next() ,而它不是迭代器。这可能是因为你试图以类似以下方式直接迭代 DocumentSnapshot

doc = firestore_db.collection("FeatureCollection").document("geom1").get()
for field in doc:  # 错误:doc 不是可迭代的
    print(field)

要访问 DocumentSnapshot 中的字段,你可以使用 to_dict() 将其转换为字典,然后进行迭代,或者使用 get() 方法直接访问字段:

doc = firestore_db.collection("FeatureCollection").document("geom1").get()

# 选项 1:转换为字典
doc_dict = doc.to_dict()
for key, value in doc_dict.items():
    print(f"{key}: {value}")

# 选项 2:使用 get() 方法
print(doc.get('fieldName')) 

关于日志消息:

你提供的日志消息表明你的 gRPC 库工作正常。 ALT 消息表明 ALTS(应用程序层传输安全)功能在你的平台(如果它不是 Linux 或 Windows)上不可用。但是,除非你专门使用 ALTS,否则它不应该影响你的代码。

请确保你使用的是 firebase-admin 包的最新版本。你可以使用以下命令更新它:

pip install --upgrade firebase-admin

如果你仍然遇到问题,请提供你的 Firebase Admin SDK 版本以及相关代码片段,以便我能够进一步帮助你。

标签:python,google-cloud-firestore,firebase-admin
From: 78791481

相关文章

  • 从 DOCKER 下的共享卷在 Linux 中执行 PyInstaller 生成的文件时出现 Python 子进程 F
    我已经使用PyInstaller生成了一个可执行文件,例如test(没有扩展名,因为它是Linux)并将其存储在一个目录中,例如data我有一个Python程序,如下所示:importsubprocessfrompathlibimportPath...defrun_exe():try:#getcurrentdirectory......
  • 从源代码安装 python3.5 后如何修复 virtualenv 的 python pip 分段错误(核心转储)响应
    背景嗨,我的主要目标是为许多使用旧版本Python的项目创建一个virtualenv,这些项目与系统版本(3.10.x)是分开的。我是使用PopOS22.04并进行所有更新。由于此错误,我什至无法使用pip。我也阅读了周围的内容,但我读到的所有解决方案要么输出日志文件,要么......
  • 无法使用适用于 Azure AI 搜索的 Python SDK 将数据添加到 ComplexField
    我想将带有嵌套字典的有效负载上传到AzureAI搜索索引。我在索引中使用ComplexField作为负载中的嵌套字典。索引无法识别嵌套字典,并且出现空错误。这是我的代码:ComplexField,CorsOptions,SearchIndex,ScoringProfile,SearchFieldDataType,Sim......
  • 如何使用 Python 从 Square 中的创建客户方法中检索客户 ID
    我正在square创建一个客户并得到如下结果。我需要的是获取客户的id。我的代码:fromsquare.clientimportClientclient=Client(access_token=settings.SQUARE_ACCESS_TOKEN,environment=settings.SQUARE_ENVIRONMENT,)api_customers=client.customers......
  • 为什么从.导入Python
    我使用的存储库的结构如下:在myrepo/src/中有:主要.pycore.py和somepkgsomepkg有init.py和其他python文件。somepkg不是任何文件中的类或函数。在main.py中,我看到:from.importcorefrom.importsomepkg我的问题是from和.......
  • 使用 Python 中的 Square API 检索客户 ID
    我正在为Square开发一个客户创建表单,它将创建一个客户,然后立即检索他们的ID以在程序中进一步使用。但是,我不知道如何使用API来过滤使用list_customers命令返回的数据。我找到了这篇文章:HowtoretrievecustomeridfromcreatecustomermethodinSquareusing......
  • 如何通过在字符串中使用 \u 或 \U 转义来正确表示 python3 (3.6.1+) 中的补充 unico
    最近我正在学习python,在python3中遇到了unicode转义文字的问题。似乎像Java一样,\u转义被解释为Java使用的UTF-16代码点,但问题来了:例如,如果我尝试放置3个字节的utf-8字符,例如“♬”(https://unicode-table.com/en/266C/),甚至是补充unicode字符,例如“......
  • 我的 Python 代码和 Cycle Time 小部件之间的平均周期时间不同
    我过去遇到过如何在周期时间小部件中计算平均周期时间的一些问题,因此我决定使用Python进行分析,看看是否找到任何方法来计算平均周期时间并获得相同的结果周期时间小部件中显示的值。我的问题是我无法达到周期时间小部件中显示的相同的平均周期时间值。你们能帮我解决这......
  • python3之requests库使用
    使用https://www.cnblogs.com/caroline2016/p/17007956.html建立的api测试下requests库怎么使用。模拟登录时laravelapi那边出现了 Sessionstorenotsetonrequest.错误。解决办法在app/Http/Kernel.php中api中间件组中添加两行代码:<?phpprotected$middlewareGrou......
  • 如何利用Python中的pyecharts制作—不同的柱状图
    目录专栏导读库的介绍库的安装1、柱状图(防止x轴标签名过长)2、柱状图—堆叠样式3、复合型柱状图4、柱状图—字典型总结专栏导读......