ventajas que mejor desventajas caracteristicas database orm language-agnostic

database - que - ¿Qué es un ORM y dónde puedo obtener más información al respecto?



propel orm (9)

Alguien sugirió que use un ORM para un proyecto que estoy diseñando, pero tengo problemas para encontrar información sobre qué es o cómo funciona. ¿Alguien puede darme una breve explicación o un enlace sobre dónde puedo obtener más información al respecto?


¿Alguien puede darme una breve explicación ...

Por supuesto.

ORM significa "Objeto para mapeo relacional" donde

  • La parte Object es la que usa con su lenguaje de programación (python en este caso)

  • La parte Relacional es un Sistema de Base de Datos Relacional (una base de datos que es) hay otros tipos de bases de datos, pero la más popular es relacional (usted sabe tablas, columnas, pk fk, etc. ej. Oracle MySQL, MS-SQL)

  • Y finalmente, la parte de Mapeo es donde haces un puente entre tus objetos y tus tablas.

En aplicaciones donde no utiliza un marco ORM, puede hacerlo a mano. El uso de un marco ORM le permitirá reducir la plantilla necesaria para crear la solución.

Entonces digamos que tienes este objeto.

class Employee: def __init__( self, name ): self.__name = name def getName( self ): return self.__name #etc.

y la mesa

create table employee( name varcar(10), -- etc )

El uso de un marco ORM le permitirá mapear ese objeto con un registro db automágicamente y escribir algo como:

emp = Employee("Ryan") orm.save( emp )

Y haga que el empleado se inserte en la base de datos.

Vaya, no fue tan breve, pero espero que sea lo suficientemente simple para ver otros artículos que lees.


Introducción

La correlación de objetos relacionales (ORM) es una técnica que le permite consultar y manipular datos de una base de datos utilizando un paradigma orientado a objetos. Cuando hablamos de ORM, la mayoría de las personas se refieren a una biblioteca que implementa la técnica de mapeo relacional de objetos, de ahí la frase "un ORM".

Una biblioteca ORM es una biblioteca completamente normal escrita en el idioma de su elección que encapsula el código necesario para manipular los datos, por lo que ya no usa SQL; usted interactúa directamente con un objeto en el mismo idioma que está utilizando.

Por ejemplo, aquí hay un caso completamente imaginario con un pseudo lenguaje:

Tienes una clase de libro, quieres recuperar todos los libros cuyo autor es "Linus". Manualmente, harías algo así:

book_list = new List(); sql = "SELECT book FROM library WHERE author = ''Linus''"; data = query(sql); // I over simplify ... while (row = data.next()) { book = new Book(); book.setAuthor(row.get(''author''); book_list.add(book); }

Con una biblioteca ORM, se vería así:

book_list = BookTable.query(author="Linus");

La parte mecánica se trata automáticamente a través de la biblioteca ORM.

Pros y contras

Usar ORM ahorra mucho tiempo porque:

  • DRY : Usted escribe su modelo de datos en un solo lugar, y es más fácil actualizar, mantener y reutilizar el código.
  • Se realizan muchas cosas automáticamente, desde el manejo de la base de datos hasta I18N .
  • Te obliga a escribir código MVC , que, al final, hace que tu código sea un poco más limpio.
  • No tiene que escribir SQL mal formado (la mayoría de los programadores web realmente lo chupan, porque SQL se trata como un lenguaje "secundario", cuando en realidad es muy poderoso y complejo).
  • Desinfección; usar declaraciones o transacciones preparadas es tan fácil como llamar a un método.

Usar una biblioteca ORM es más flexible porque:

  • Se adapta a tu forma natural de codificación (¡es tu lenguaje!).
  • Se abstrae el sistema de base de datos, por lo que puede cambiarlo cuando lo desee.
  • El modelo está débilmente ligado al resto de la aplicación, por lo que puede cambiarlo o usarlo en cualquier otro lugar.
  • Le permite usar bondad OOP como herencia de datos sin dolor de cabeza.

Pero ORM puede ser un dolor:

  • Tienes que aprenderlo, y las bibliotecas ORM no son herramientas livianas;
  • Tienes que configurarlo. El mismo problema.
  • El rendimiento está bien para las consultas habituales, pero un maestro SQL siempre lo hará mejor con su propio SQL para grandes proyectos.
  • Se abstrae la base de datos. Si bien está bien si sabes lo que está sucediendo detrás de la escena, es una trampa para los nuevos programadores que pueden escribir declaraciones muy codiciosas, como un golpe fuerte en un bucle for .

¿Cómo aprender sobre ORM?

Bueno, usa uno. Cualquiera que sea la biblioteca ORM que elija, todos usan los mismos principios. Hay muchas bibliotecas ORM por aquí:

Si desea probar una biblioteca ORM en la programación web, sería mejor utilizar una pila de framework completo como:

  • Symfony (PHP, usando Propel o Doctrine).
  • Django (Python, usando un ORM interno).

No intente escribir su propio ORM, a menos que esté intentando aprender algo. Este es un trabajo gigantesco, y los viejos tomaron mucho tiempo y trabajo antes de que se volvieran confiables.


Como todos los acrónimos, es ambiguo, pero supongo que se refieren al mapeador relacional de objetos : una forma de cubrir los ojos y hacer creer que no hay SQL debajo, sino que son todos objetos ;-). No es realmente cierto, por supuesto, y no sin problemas: el siempre colorido Jeff Atwood ha descrito a ORM como el Vietnam de CS ;-). Pero, si sabes poco o nada de SQL, y tienes un problema bastante simple / a pequeña escala, ¡pueden ahorrarte tiempo! -)


DALMP http://code.google.com/p/dalmp/ podría ser una buena aplicación para php / mysql que actualmente admite muchos backends de caches como redis / memcache / apc


El modelo de objetos se refiere a los siguientes tres conceptos Herencia de encapsulación de abstracción de datos El modelo relacional usaba el concepto básico de una relación o tabla. Los productos de mapeo relacional de objetos (mapeo OR) integran capacidades de lenguaje de programación de objetos con bases de datos relacionales.


El primer capítulo del libro Hibernate Java Persistence with Hibernate (3ª edición) tiene una excelente visión general de los conceptos generales de ORM y analiza la motivación y el diseño de los ORM. Muy recomendado, incluso si no trabajas con Java.


Este es un gran tema. Elija un buen libro de hibernación y explique detalladamente el ORM antes de llegar al material esencial de Hibernate.

https://www.hibernate.org/


Un ORM (Object Relational Mapper) es una pieza / capa de software que ayuda a mapear los Objetos de su código a su base de datos.

Algunos manejan más aspectos que otros ... pero el propósito es quitar algo del peso de la capa de datos de los hombros del desarrollador.

Aquí hay un breve clip de Martin Fowler (Data Mapper):

Patrones de asignadores de datos de arquitectura de aplicaciones empresariales


Storm es una gran opción para quienes usan Python.