2012-04-20 26 views
9

Estoy buscando MondoDB Python ODM/ORM que toma lo mejor de dos mundos: ODM/ORM & ultra rápida diccionario de lectura directa.Mongodb ligero ODM/ORM para Python

En otras palabras bulto deberá cumplir con los requisitos siguientes:

  1. permite definir y hacer cumplir esquema.
  2. Permite validar campos.
  3. Permite leer objetos directamente desde mongodb (sin gastos generales de ODM/ORM).
    • Se puede acceder a colecciones/objetos devueltos directamente por pymongo usando la capa ODM/ORM (sin consultas adicionales).
    • Me imagino que algún tipo de campo perezoso agregado por el controlador de pymongo a los objetos que proporciona acceso al jugo de ORM (pymongo permite tales extensiones).
    • Imagínese caso de uso:
      • rápidos de lectura vamos directamente a conductor,
      • Para la entrada de datos que usar la completa funcionalidad ODM/ORM apoyo
  4. Geofields
  5. GridFS apoyo de archivos e imágenes normales
  6. DBRef support
  7. No aplica ningún elemento oculto den, campos específicos del marco
  8. Funciona con Flask :)
  9. Tiene marco de formas.
    • Formas cubren sublistas/subdicts
    • formas basadas
    • Backbone serían simplemente impresionante
  10. crea modelos columna vertebral, colecciones, validadores basados ​​en la definición de pitón

sé que estoy pidiendo pero no sería genial tener algo como esto :)

De hecho, la pregunta podría reformularse en: "¿Qué de existir? El Python Mongodb ODM/ORMs (MongoKit, MongoEngine) podría extenderse fácilmente de esta manera ".

Respuesta

3

Bueno, si tomas la teoría de un ORM, lo que necesitas no es un ORM, ya que MongoDB no es una base de datos relacional, por lo que no hay un mapeo de entidades relacionales que hacer.

Creo que debe verificar la respuesta this post para comprobar si las recomendaciones hechas son las que necesita, personalmente uso MongoDB + Python directamente, debido a la "naturaleza" de Mongo y Python.

Mirando a mi alrededor encontré esta biblioteca que podría ayudarlo mongoEngine. Es como Django ORM. Deberías verificarlo.

+0

No profundizando en detalles mongo admite referencias, por lo que tenemos un subconjunto básico de base de datos relacional. En aras de la corrección, podemos referirnos por ODM/ORM. El acceso directo a pymongo está bastante bien. He estado deforestando de esa manera por un tiempo. Mongo Engine es demasiado pesado. Lo mismo para MongoKit. Estarían bien si solo pudiera encontrar una manera de usarlos en la lista ya cargada. Por cierto: http://packages.python.org/micromongo/ no está mal, aunque todavía no es lo que estoy buscando. – Munhitsu

+0

Bueno, cuando usas un ORM o un ODM, sabes que no será tan ligero como usar directamente la conexión de db. Entonces, mi recomendación para usted es usar directamente de Python, cómo dijo que es bastante bueno y simplemente funciona. – Omar

6

En primer lugar, me encantaría tenerlo también.

Basado en mi investigación

Ming es un conductor mongo ODM muy prometedor: http://merciless.sourceforge.net/

MongoEngine es demasiado grande para adaptarlo a sus necesidades/usecase. Lo mismo para MongoKit.

Hay una cierta esperanza en micromongo: http://packages.python.org/micromongo

podría ser un buen punto de partida.

BTW: Hmmm ... No sé lo que estás escribiendo, pero con formularios y validadores cubiertos puedes construir fácilmente una interfaz de administración y terminar teniendo la próxima generación de Django. ¡Buena suerte!

+0

Aparentemente, micromongo no se ha movido desde 2012. Sin embargo, viene un nuevo ODM: [umongo] (http://umongo.readthedocs.io/en/latest/). No es tan completo como se requiere en la pregunta, pero pretende ser más simple que MongoEngine, por lo que puede desarrollarlo más fácilmente. –

1

umongo nació mucho después de que se hizo la pregunta. Aunque es relativamente joven, está ganando madurez. Al igual que micromongo, su objetivo es ser simple (la "u" significa μ/micro), por lo que no proporciona las numerosas características solicitadas en la pregunta, pero está destinado a ser una base sensata sobre la cual construir.

Utiliza Marshmallow internamente para el esquema/validación del modelo, por lo que puede usarlo felizmente con otras bibliotecas que usen Marshmallow. Lo uso en una aplicación Flask que proporciona una API REST usando Marshmallow para analizar entradas/salidas. Esto limita la cantidad de duplicación entre DB y esquema de API. La aplicación utiliza otras bibliotecas del entorno Marshmallow (webargs/apispec).

Dado que tiene acceso directo a las colecciones, puede usar consultas simples de pymongo.

Además, es compatible no solo con pymongo sino también con controladores asíncronos.