¿Qué es un ORM, cómo funciona y cómo debo usar uno? [cerrado]
230
Alguien me sugirió que usara 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 de qué es un ORM y cómo funciona y cómo debo comenzar a usar uno?
Encontré esta pregunta pero es de 2009 y no sé si ya domina ORM pero busca Entity Framework en CodePlex C # ( entityframework.codeplex.com ) Aquí está el código fuente del que puede aprender. También puedes leer esto. ( dbtechnet.org/labs/dae_lab/Orm.pdf )
Esta es una pregunta útil y los votos para la primera respuesta parecen confirmarlo. Una breve descripción de lo que es ORM no requiere opinión. Solo porque el usuario solicita un enlace para comenzar, la pregunta se marca fuera de tema. Siento que esta es una reacción exagerada frecuente de los moderadores.
NeilG
3
@NeilG Una pregunta cerrada significa que la pregunta está fuera de tema. Podría haber información útil en las respuestas, pero eso no hace que la pregunta sea sobre el tema. Además, no se eliminará, permanecerá aquí, pero aún necesitamos mantener el SO limpio y sobre el tema para que funcione de la mejor manera. Entonces, para responder su primer comentario: esta no es una pregunta útil, hay respuestas útiles.
M--
1
@NeilG El problema es que la pregunta incluye una solicitud de recursos (tanto en el título como en la pregunta). Tales solicitudes no están relacionadas con el tema, en gran medida porque las personas simplemente publican un enlace a su recurso favorito, como ha sucedido en varias de las respuestas aquí. Eliminar la solicitud de recursos de la pregunta invalidaría algunas respuestas existentes. Como usuarios habituales, no se nos permite editar la pregunta para invalidar las respuestas. Por lo tanto, debe estar cerrado. Si la pregunta no fue respondida, entonces podría editarse para eliminar esas solicitudes y dejarla abierta.
Makyen
Respuestas:
483
Introducción
El mapeo relacional de objetos (ORM) es una técnica que le permite consultar y manipular datos de una base de datos utilizando un paradigma orientado a objetos. Cuando se habla 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 ordinaria escrita en su idioma de elección que encapsula el código necesario para manipular los datos, por lo que ya no usa SQL; 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 libros, quieres recuperar todos los libros de los cuales el 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 cuida automáticamente a través de la biblioteca ORM.
Pros y contras
Usar ORM ahorra mucho tiempo porque:
DRY : escribe su modelo de datos en un solo lugar, y es más fácil actualizar, mantener y reutilizar el código.
Se hacen 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 apestan, porque SQL se trata como un lenguaje "secundario", cuando en realidad es muy poderoso y complejo).
Desinfectante; El uso de 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 su forma natural de codificación (¡es su idioma!).
Resume el sistema de base de datos, por lo que puede cambiarlo cuando lo desee.
El modelo está débilmente vinculado al resto de la aplicación, por lo que puede cambiarlo o usarlo en cualquier otro lugar.
Le permite utilizar la bondad de OOP como la 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.
Resume el DB. Si bien está bien si sabes lo que sucede detrás de la escena, es una trampa para los nuevos programadores que pueden escribir declaraciones muy ambiciosas, como un gran golpe en un forbucle.
¿Cómo aprender sobre ORM?
Bueno, usa uno. Cualquiera que sea la biblioteca ORM que elija, todas usan los mismos principios. Hay muchas bibliotecas ORM por aquí:
No intente escribir su propio ORM, a menos que esté tratando de aprender algo. Este es un trabajo gigantesco, y los viejos tomaban mucho tiempo y trabajo antes de volverse confiables.
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 gestión de bases de datos relacionales (una base de datos), hay otros tipos de bases de datos, pero la más popular es relacional (ya conoce tablas, columnas, pk fk, etc., por ejemplo, Oracle MySQL, MS-SQL)
Y finalmente, la parte de Mapeo es donde haces un puente entre tus objetos y tus tablas.
En las aplicaciones en las que no usa un marco ORM, lo hace a mano. El uso de un marco ORM le permitiría 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ía asignar ese objeto con un registro db automáticamente 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 como para captar otros artículos que lees.
Al igual que todos los acrónimos, es ambiguo, pero supongo que significan 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 conoce poco o nada de SQL y tiene un problema bastante simple / a pequeña escala, ¡pueden ahorrarle tiempo! -)
El modelo de objetos se ocupa de los siguientes tres conceptos: abstracción de datos, herencia de encapsulación, el modelo relacional utiliza 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.
Respuestas:
Introducción
El mapeo relacional de objetos (ORM) es una técnica que le permite consultar y manipular datos de una base de datos utilizando un paradigma orientado a objetos. Cuando se habla 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 ordinaria escrita en su idioma de elección que encapsula el código necesario para manipular los datos, por lo que ya no usa SQL; 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 libros, quieres recuperar todos los libros de los cuales el autor es "Linus". Manualmente, harías algo así:
Con una biblioteca ORM, se vería así:
La parte mecánica se cuida automáticamente a través de la biblioteca ORM.
Pros y contras
Usar ORM ahorra mucho tiempo porque:
Usar una biblioteca ORM es más flexible porque:
Pero ORM puede ser un dolor:
for
bucle.¿Cómo aprender sobre ORM?
Bueno, usa uno. Cualquiera que sea la biblioteca ORM que elija, todas usan los mismos principios. Hay muchas bibliotecas ORM por aquí:
Si desea probar una biblioteca ORM en programación web, sería mejor usar una pila de framework completa como:
No intente escribir su propio ORM, a menos que esté tratando de aprender algo. Este es un trabajo gigantesco, y los viejos tomaban mucho tiempo y trabajo antes de volverse confiables.
fuente
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 gestión de bases de datos relacionales (una base de datos), hay otros tipos de bases de datos, pero la más popular es relacional (ya conoce tablas, columnas, pk fk, etc., por ejemplo, Oracle MySQL, MS-SQL)
Y finalmente, la parte de Mapeo es donde haces un puente entre tus objetos y tus tablas.
En las aplicaciones en las que no usa un marco ORM, lo hace a mano. El uso de un marco ORM le permitiría reducir la plantilla necesaria para crear la solución.
Entonces digamos que tienes este objeto.
y la mesa
El uso de un marco ORM le permitiría asignar ese objeto con un registro db automáticamente y escribir algo como:
Y haga que el empleado se inserte en la base de datos.
Vaya, no fue tan breve, pero espero que sea lo suficientemente simple como para captar otros artículos que lees.
fuente
Un ORM (Object Relational Mapper) es una pieza / capa de software que ayuda a asignar sus objetos de 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 mapeadores de datos de arquitectura de aplicaciones empresariales
fuente
Al igual que todos los acrónimos, es ambiguo, pero supongo que significan 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 conoce poco o nada de SQL y tiene un problema bastante simple / a pequeña escala, ¡pueden ahorrarle tiempo! -)
fuente
El modelo de objetos se ocupa de los siguientes tres conceptos: abstracción de datos, herencia de encapsulación, el modelo relacional utiliza 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.
fuente