«ОШИБКА: 409 Документ уже существует» при добавлении новых документов в базу данных Google Firestore.Python

Программы на Python
Anonymous
«ОШИБКА: 409 Документ уже существует» при добавлении новых документов в базу данных Google Firestore.

Сообщение Anonymous »


Чтобы дать вам представление о более широком контексте этой проблемы; Я создаю веб-приложение, в котором пользователи могут создавать списки внутри досок для организации своей работы на Python, используя flask и Firebase. Как и во многих других приложениях todo. Однако моя проблема локализована в коде, который я предоставил ниже.

@boards.route("/board/create", методы=["POST"]) @login_required защита create_board(): # Убедитесь, что заголовок существует. если не request.form.get("title"): log.error("Заголовок пуст.") вернуть перенаправление("/профиль") заголовок = request.form.get("название") пытаться: ref = firebase_database.collection("users").document(session["localId"]).collection("boards") # Добавить плату в базу данных. ref.add({ «метка времени»: firestore.SERVER_TIMESTAMP, «титул»: заголовок, "описание": "" }) кроме исключения как e: log.error(f"Ошибка подключения к базе данных. {e}") вернуть перенаправление("/профиль") вернуть перенаправление("/профиль") Цель этого кода – получить введенные пользователем данные под названием "title" и добавить новый документ с уникальным идентификатором в подколекцию "доски".

Я решил использовать функцию «добавить», потому что она делает именно то, что я описал. Он создает документ с уникальным идентификатором, документацию я связал здесь. Однако всякий раз, когда я вызываю эту функцию, мне возвращается следующая ошибка:

ОШИБКА: Ошибка подключения к базе данных. 409 Документ уже существует: .../users/sycvmE14lIVjDr6nHzwhy18wxNm2/boards/CqnIB5oN7SQjou5tXASs

Эта ошибка объясняется тем, что документ с таким именем/ключом уже существует. Это странно, поскольку функция add() должна создавать документ с уникальным ключом. Конечно, есть шанс, что это произойдет, но это настолько маловероятно, что не должно вызывать беспокойства. Я запускаю этот код снова и снова, и он продолжает выдавать ту же ошибку.

Я попытался использовать следующий код в качестве обходного пути (заменив функцию add() функцией set() и вставив функцию document() в конце инициализации ссылки, которая должна делать то же самое. ). Интересно, что мне не возвращается ошибка, а вместо этого, если в базе данных уже существует документ, он будет перезаписывать этот документ с тем же уникальным идентификатором, который он создал ранее, снова и снова. Иногда создается документ с другим ключом, но это случается редко, и я не нашел способа намеренно воссоздать это.

попробуйте: ref = firebase_database.collection("users").document(session["localId"]).collection("boards").document() # Добавить плату в базу данных. ref.set({ «метка времени»: firestore.SERVER_TIMESTAMP, «титул»: заголовок, "описание": "" }) Кроме того, я попытался написать свою собственную функцию для реализации той же функциональности по созданию документа с уникальным идентификатором.

defgenerate_random_id(size: int = 20): символы = строка.ascii_letters + строка.цифры return "".join(random.choice(chars) для _ в диапазоне (размер)) попробуйте: ref = firebase_database.collection("users").document(session["localId"]).collection("boards").document(generate_random_id()) # Добавить плату в базу данных. ref.set({ «метка времени»: firestore.SERVER_TIMESTAMP, «титул»: заголовок, "описание": "" }) Однако при использовании этой функции получается тот же эффект, что и раньше при перезаписи данных. Это поражает меня, предполагая, что это как-то связано с моим кодом, а не с Firebase. Это как если бы функция создания уникального ключа запускалась только один раз во время выполнения и сохранялась в переменной, которая будет использоваться при необходимости, но это не так.

Если это поможет, я также вставил ниже HTML-код, вызывающий этот метод.

Добавить Если есть что-то еще, что было бы полезно включить, дайте мне знать.

Я был бы очень признателен за любую помощь, я серьезно запутался.

Спасибо всем, кто нашел время прочитать это, Себ.

Вернуться в «Python»