Python 如何阻止Pyrebase set()覆盖现有数据?

Python 如何阻止Pyrebase set()覆盖现有数据?,python,firebase,flask,firebase-realtime-database,pyrebase,Python,Firebase,Flask,Firebase Realtime Database,Pyrebase,我正在使用Flask&pyrbase;我已经成功地创建了登录ok和注册表。登录并注册后,用户将重定向到其个人资料页面 我的问题是,当我尝试添加一个新条目时,我的现有数据被覆盖。当我创建一个新的db条目时,我使用set()而不是push(),我想这可能是为什么 我已经尽可能地缩短了代码 创建帐户和注册业务: @app.route('/register', methods=['GET', 'POST']) def register(): unsuccessful = 'Please check yo

我正在使用Flask&pyrbase;我已经成功地创建了登录ok和注册表。登录并注册后,用户将重定向到其个人资料页面

我的问题是,当我尝试添加一个新条目时,我的现有数据被覆盖。当我创建一个新的db条目时,我使用set()而不是push(),我想这可能是为什么

我已经尽可能地缩短了代码

创建帐户和注册业务:

@app.route('/register', methods=['GET', 'POST'])
def register():
unsuccessful = 'Please check your credentials'
successful = 'Registraion successful'
    if request.method == 'POST':
        email = request.form.get('email')
        confirmEmail = request.form('confirmEmail')
        password = request.form.get('pass')
        userName = request.form.get('inputName')
        businessName = request.form.get('businessName')
        startYear = request.form.get('startYear')
        selectCategory = request.form.get('selectCategory')
        businessDescription = request.form.get('businessDescription')
        businessAddress = request.form.get('businessAddress')
        businessTown = request.form.get('businessTown')
        businessCity = request.form.get('businessCity')
        businessPostcode = request.form.get('businessPostcode')
        businessNumber = request.form.get('businessNumber')
        businessEmail = request.form.get('businessEmail')
        bameRegister = dict(
            userName = userName,
            confirmationEmail = confirmEmail,
            businessName = businessName,
            businessStartYear = startYear,
            businessCategory = selectCategory,
            businessDescription = businessDescription,
            businessAddress = [businessAddress, businessTown, businessCity, businessPostcode],
            businessNumber = businessNumber,
            businessEmail = businessEmail,
        )
        if selectCategory == "arts":
            try:
                user = auth.create_user_with_email_and_password(email, password)
                auth.send_email_verification(user['idToken'])
                db.child("Bame_Buisness").child("business").child("arts").set(bameRegister, user['idToken'])
                return render_template('homepage.html', x=successful)
            except:
                return render_template('homepage.html', y=unsuccessful)
        elif selectCategory == "food":
            try:
                user = auth.create_user_with_email_and_password(email, password)
                auth.send_email_verification(user['idToken'])
                db.child("Bame_Business").child("business").child("food").set(bameRegister, user['idToken'])
                return render_template('homepage.html', x=successful)
            except:
                return render_template('homepage.html', y=unsuccessful)
       elif selectCategory == "health":
           try:
               user = auth.create_user_with_email_and_password(email, password)
               auth.send_email_verification(user['idToken'])
               db.child("Bame_Business").child("business").child("health").set(bameRegister, user['idToken'])
               return render_template('homepage.html', x=successful)
            except:
               return render_template('homepage.html', y=unsuccessful)
    return render_template('homepage.html')
创建登录名:

@app.route('/login', methods=['GET', 'POST'])
def login():
    unsuccessful = 'Please check your credentials'
    if request.method == 'POST':
        try:
            user = auth.sign_in_with_email_and_password(email, password)
            signed_in_user = auth.get_account_info(user['idToken'])
            artCategory = db.child("Bame_Business").child("business").child("arts").get(user['idToken']).val()
            foodCategory = db.child("Bame_Business").child("business").child("food").get(user['idToken']).val()
            healthCategory = db.child("Bame_Business").child("business").child("health").get(user['idToken']).val()
            if signed_in_user['users'][0]['email'] == artCategory['confirmationEmail']:
                return render_template('profile.html', artCategory=artCategory)
            elif signed_in_user['users'][0]['email'] == foodCategory['confirmationEmail']:
                return render_template('profile.html', foodCategory=foodCategory)
            elif signed_in_user['users'][0]['email'] == healthCategory['confirmationEmail']:
                return render_template('profile.html', healthCategory=heathCategory)
        except:
            return render_template('homepage.html')
    return render_template('homepage.html')
这是登录后创建新业务的路径:

@app.route('newBusiness', methods=['GET', 'POST'])
def newBusiness():
    if request.method == 'POST':
        email = request.form.get('email')
        confirmEmail = request.form.get('confirmEmail')
        password = request.form.get('pass')
        userName = request.form.get('userName')
        businessName = request.form.get('businessName')
        startYear = request.form.get('startYear')
        selectCategory = request.form.get('selectCategory')
        businessDescription = request.form.get('businessDescription')
        businessAddress = request.form.get('businessAddress')
        businessTown = request.form.get('businessTown')
        businessCity = request.form.get('businessCity')
        businessPostcode = request.get('businessPostcode')
        businessNumber = request.form.get('businessNumber')
        businessEmail = request.form.get('businessEmail')
        bameRegister = dict(
            userName = userName,
            confirmationEmail = confirmEmail,
            businessName = businessName,
            businessStartYear = startYear,
            businessCategory = businessCategory,
            businessDescription = businessDescription,
            businessAddress = [businessAddress, businessTown, businessCity, businessPostcode],
            businessNumber = businessNumber,
            businessEmail = businessEmail,
        )
        if selectCategory == "arts":
            try:
                user = auth.sign_in_with_email_and_password(email, password)
                user = auth.refresh(user['refreshToken'])
                db.child("Bame_Business").child("business").child("arts").set(bameRegister, user['idToken'])
                signed_in_user = auth.get_account_info(user['idToken'])
                artCategory = db.child("Bame_Business").child("business").child("arts").get(user['idToken']).val()
                if signed_in_user['users'][0]['email'] == artCategory['confirmationEmail']:
                   return render_template('profile.html', artCategory=artCategory)
            except:
                return render_template('homepage.html')
        elif selectCategory == "food":
            try:
                user = auth.sign_in_with_email_and_password(email, password)
                user = auth.refresh(user['refreshToken'])
                db.child("Bame_Business").child("business").child("food").set(bameRegister, user['idToken'])
                signed_in_user = auth.get_account_info(user['idToken'])
                foodCategory = db.child("Bame_Business").child("business").child("food").get(user['idToken']).val()
                if signed_in_user['users'][0]['email'] == foodCategory['confirmationEmail']:
                    return render_template('profile.html', foodCategory=foodCategory)
            except:
                return render_template('homepage.html')
        elif selectCategory == "health":
            try:
                user = auth.sign_in_with_emal_and_password(email, password)
                user = auth.refresh(user['refreshToken'])
                db.child("Bame_Business").child("business").child("health").set(bameRegister, user['idToken'])
                signed_in_user = auth.get_account_info(user['idToken'])
                healthCategory = db.child("Bame_Business").child("business").child("health").get(user['idToken']).val()
                if signed_in_user['users'][0]['email'] == healthCategory['confirmationEmail']:
                    return render_template('profile.html', healthCategory=healthCategory)
            except:
                return render_template('homepage.html')
    return render_template('homepage.html')
用户登录后,假设他们在arts类别中注册了第一个业务,当他们在arts类别中注册了第二个不同的业务时,Firebase中的原始集合将被覆盖。即使在选择其他类别时也会发生这种情况。这绝对是不理想的,因为有人可能会覆盖其他人的数据,从而导致各种各样的问题

我知道您可以使用push&set在pyrbase中创建新条目;我之所以选择set,是因为当我使用push时,它创建了一个唯一的标记,我发现很难从用户帐户获得单独的访问权限。使用set方法,可以很容易地通过
artCategory['businessName']
artCategory['businessDescription']
artCategory['confirmationmail']
等调用我想要的词典部分

我只需要在登录后创建一个新的商业登记,而不覆盖任何现有数据,如果有人能帮我想出一个解决方案,将不胜感激


亲切问候

.set()
覆盖
.update()
仅更新已更改的字段。

因此,我必须使用
.push()