使用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
相关产品推荐
相关产品推荐

