Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

330
Vistas
FastAPI se niega a dejarme crear un documento mongoengine

Tengo una aplicación FastAPI Python con rutas que operan en una instancia de MongoDB. La conexión funciona bien y puedo consultar documentos para mis extremos GET, pero parece imposible crear un nuevo documento desde FastAPI.

Constantemente obtengo:

No ha definido una conexión predeterminada

Tengo una secuencia de comandos independiente que maneja algunas tareas de migración de datos y usa exactamente la misma clase de base de datos y modelos de documentos que la aplicación FastAPI, y esa secuencia de comandos puede guardar documentos en mongo perfectamente bien. No hay diferencia en cómo se crea una instancia del objeto DB entre la API y el script.

La clase de base de datos:

 from os import getenv from mongoengine import connect from pymongo import MongoClient from pymongo.errors import ServerSelectionTimeoutError class Mongo: @property def target_db(self): return 'some_db' @property def uri(self) -> str: env_uri = getenv('MONGODB', None) if env_uri is None: raise DBError('MONGODB environment variable missing') return env_uri.strip() def connect(self) -> MongoClient: try: return connect(host=self.uri, db=self.target_db, alias=self.target_db) except ServerSelectionTimeoutError as e: raise ServerSelectionTimeoutError(e)

Todos mis modelos de base de datos tienen metaatributos que definen exactamente qué base de datos y colección usar:

 class Thing(Document): meta = {'db_alias': 'some_db', 'collection': 'things'}

Las consultas sobre documentos existentes tienen éxito dentro de una definición de ruta:

 results = Thing.objects.filter(**query) # This returns things that I can iterate over

La creación de documentos falla dentro de una definición de ruta:

 new_thing = Thing(**creation_args) new_thing.save()

Error:

 mongoengine.connection.ConnectionFailure: You have not defined a default connection

¿Y eso que significa? Sé que estoy conectado porque puedo consultar la base de datos.

¿Cómo es posible que pueda consultar con éxito documentos de Mongo pero no guardarlos? Todas las sugerencias que he visto en línea apuntan a no haber definido una base de mongoengine.connect o un alias en la llamada a db , pero claramente estoy en mi objeto Mongo , e incluso si eso fuera cierto, seguramente no sería capaz de recuperar documentos de la colección de db...

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Los modelos de documentos mongoengine tenían meta atributos con formato incorrecto...

 class Accounts(Document): meta = {'db_alias': 'some_db', 'collection': 'things'}

Solución: era necesario cambiar db_alias a ​db .

No encontré esto a través de la documentación, y definitivamente no a través de los mensajes de error extremadamente inútiles. Lo probé por capricho. Ahora todo funciona usando el marco FastAPI.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda