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

使用Pyrebase与Python3.6无法删除Firebase数据库数据,求解决方法

解决Pyrebase无法删除Firebase数据库数据的问题

我目前用Pyrebase和Python 3.6操作Firebase数据库,能正常读取和推送新数据,但死活删不掉数据,以下是我的代码和数据库结构,麻烦帮忙排查下问题:

我的代码示例

import pyrebase

config = {
    "apiKey": "***",
    "authDomain": "****.firebaseapp.com",
    "databaseURL": "https://***.firebaseio.com",
    "storageBucket": "*****.appspot.com",
    "serviceAccount": "secret/****.json"
}

firebase = pyrebase.initialize_app(config)
auth = firebase.auth()
email = "*****"
password = "****"
user = auth.sign_in_with_email_and_password(email, password)
db = firebase.database()

charities_d = {
    "haaaaello": {
        "obj": None,
        "open": [1, 1, 1, 1, 1],
        "bags": [2, 2, 2, 2, 2],
    },
    "bantdddder": {
        "obj": None,
        "open": [1, 1, 1, 1, 1],
        "bags": [2, 2, 2, 2, 2],
    },
    "dsddd": {
        "obj": None,
        "open": [1, 1, 1, 1, 1],
        "bags": [2, 2, 2, 2, 2],
    },
}

# 推送数据是正常的
# db.child("users").push({"name": "bub"}, user["idToken"])

# 尝试删除的代码,没效果
# db.child("users").child({"name": "bub"}).remove(user["idToken"])
db.child("users").child("bub").remove(user['idToken'])

数据库结构

DB:
- users
  -> bub(要删除的节点)
  -> anotherName

可能的解决方向,你可以逐个排查:

  • 检查Firebase数据库的权限规则
    这是最常见的原因!默认的实时数据库规则可能限制了删除操作。你可以登录Firebase控制台,找到「实时数据库」→「规则」,确认规则是否允许认证用户进行删除。比如可以暂时改成这样测试(测试完记得改回更严格的规则):

    {
      "rules": {
        ".read": "auth != null",
        ".write": "auth != null"
      }
    }
    

    如果改成这个规则后能删除,说明原来的规则里写权限没有包含删除操作,需要调整规则逻辑。

  • 刷新认证Token
    sign_in_with_email_and_password返回的idToken是有过期时间的(一般1小时),如果你的代码运行时间较长,可能Token已经失效了。可以尝试刷新Token后再执行删除:

    # 刷新Token
    user = auth.refresh(user['refreshToken'])
    # 用新的Token执行删除
    db.child("users").child("bub").remove(user['idToken'])
    
  • 确认节点路径完全正确
    仔细检查users/bub这个路径是否真的存在,有没有拼写错误(比如大小写、空格)。你可以先读取这个节点的数据,确认能获取到,再执行删除:

    # 先读取节点,确认存在
    data = db.child("users").child("bub").get(user['idToken']).val()
    print(data)  # 如果能输出内容,说明路径正确
    if data is not None:
        db.child("users").child("bub").remove(user['idToken'])
    
  • 检查Pyrebase版本和调用方式
    有些旧版本的Pyrebase可能在remove方法的参数传递上有问题,你可以尝试升级Pyrebase到最新版本:

    pip install --upgrade pyrebase
    

    另外,也可以尝试不带Token参数(如果你的serviceAccount已经有足够权限的话),直接调用:

    db.child("users").child("bub").remove()
    

    因为你已经配置了serviceAccount,它本身拥有管理员权限,可能不需要再传用户的idToken。


内容的提问来源于stack exchange,提问作者mortuie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:27:16