O que é um ORM, como ele funciona, e como devo usar um? [fechado]

Alguém sugeriu que eu usasse um ORM para ... um projecto que estou a desenhar, mas estou a ter dificuldade em encontrar informações sobre o que é ou como funciona.

Alguém me pode dar uma breve explicação do que é um ORM e como funciona e como devo começar a usar um?

Author: NeilG, 2009-08-14

5 answers

Introdução

O Mapeamento Objeto-Relacional (ORM) é uma técnica que permite pesquisar e manipular dados de uma base de dados usando um paradigma orientado a objeto. Quando se fala de ORM, a maioria das pessoas se refere a uma biblioteca que implementa a técnica de Mapeamento Objeto-Relacional, daí a frase "um ORM".

Uma biblioteca ORM é uma biblioteca completamente normal escrita na sua língua de escolha que encapsula o código necessário para manipular os dados, por isso você não usa mais SQL; você interage diretamente com um objeto na mesma língua que você está usando.

Por exemplo, aqui está um caso completamente imaginário com uma pseudo linguagem:

Você tem uma aula de Livros, você quer recuperar todos os livros de que o autor é "Linus". Manualmente, você faria algo assim:

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);
}
Com uma biblioteca ORM, seria assim:
book_list = BookTable.query(author="Linus");

A parte mecânica é tratada automaticamente através do ORM biblioteca.

Prós e contras

Usar o ORM poupa muito tempo porque:

  • DRY : você escreve seu modelo de dados em apenas um lugar, e é mais fácil atualizar, manter e reutilizar o código.
  • muitas coisas são feitas automaticamente, desde o tratamento de bases de dados até I18N .
  • Isso obriga-te a escrever o código MVC, o que, no fim de contas, torna o teu código um pouco mais limpo. Não é preciso escrever SQL mal formado. Programadores Web realmente não prestam, porque SQL é tratada como uma linguagem" sub", quando na realidade é muito poderosa e complexa).
  • desinfectar; usar declarações ou transacções preparadas é tão fácil como chamar um método.

Usar uma biblioteca ORM é mais flexível porque:

    Encaixa-se na sua forma natural de codificar (é a sua linguagem!). Ele abstrai o sistema DB, então você pode mudá-lo quando quiser.
  • o modelo é fracamente ligado ao resto da aplicação, para que possa alterá-la ou usá-la em qualquer outro lugar.
  • Permite - te usar a bondade do OOP como herança de dados sem dor de cabeça.

Mas ORM pode ser uma dor:

  • você tem que aprender, e as bibliotecas ORM não são ferramentas leves;
  • Tens de preparar tudo. O mesmo problema.
  • o desempenho é bom para as consultas habituais, mas um mestre SQL sempre fará melhor com o seu próprio SQL para o grande projecto.
  • abstrai o DB. Enquanto está tudo bem se você sabe o que está acontecendo por trás da cena, é uma armadilha para novos programadores que podem escrever declarações muito gananciosas, como um grande sucesso em um loop {[[2]}.
Como aprender sobre ORM? Bem, usa um. Qualquer biblioteca ORM que você escolher, todos eles usam os mesmos princípios. Há muitas bibliotecas ORM por aqui.

Se quiser experimentar uma biblioteca ORM na programação Web, é melhor usar uma pilha de framework inteira como:

  • Simfonia (PHP, usando Propel ou Doutrina).
  • Django (Python, usando um ORM interno).

Não tente escrever o seu o próprio ORM, a não ser que estejas a tentar aprender alguma coisa. Este é um trabalho gigantesco, e os antigos demoraram muito tempo e trabalharam antes de se tornarem confiáveis.

 482
Author: e-satis, 2018-02-19 04:14:11

alguém me pode dar uma breve explicação?..

Claro.

ORM significa "objecto ao mapeamento relacional" em que

  • A parte objecto é a que usa com a sua linguagem de programação ( python neste caso )

  • A parte relacional é um sistema de gerenciamento de banco de dados relacional (um banco de dados que é ) existem outros tipos de banco de dados, mas o mais popular é relacional (você conhece tabelas)., colunas, pk FK etc eg Oracle MySQL, MS-SQL )

  • E finalmente a parte do Mapeamento é onde se faz uma ponte entre os objectos e as mesas.

Em aplicações onde não se usa uma plataforma ORM, faz-se isto à mão. O uso de um framework ORM permitiria reduzir o boilerplate necessário para criar a solução.

Digamos que tem este objecto.
 class Employee:
      def __init__( self, name ): 
          self.__name = name

       def getName( self ):
           return self.__name

       #etc.

E o quadro

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

A utilização de um quadro ORM permitiria você mapear esse objeto com um registro db automagicamente e escrever algo como:

   emp = Employee("Ryan")

   orm.save( emp )

E ter o empregado inserido no DB.

Oops não foi tão breve, mas eu espero que seja simples o suficiente para pegar outros artigos que você leu.

 50
Author: OscarRyz, 2016-05-23 20:32:33

Um ORM (Mapeador de objetos relacionais) é uma peça/camada de software que ajuda a mapear os seus objetos de código para a sua base de dados.

Alguns tratam de mais aspectos do que outros...mas o objetivo é tirar parte do peso da camada de dados dos ombros do desenvolvedor. Aqui está um breve clipe de Martin Fowler.

Padrões dos mapeadores de dados da Arquitectura de aplicações empresariais

 17
Author: Justin Niessner, 2009-08-14 19:08:40

Como todos os acrónimos, é ambíguo, mas presumo que significam mapeador de objectos relacionais -- uma forma de tapar os olhos e fazer crer que não há SQL por baixo, mas sim todos os objectos; -). Não é realmente verdade, é claro, e não sem problemas-o sempre colorido Jeff Atwood descreveu ORM como o Vietnã do CS ; -). Mas, se você sabe pouco ou nenhum SQL, e tem um problema bastante simples / de pequena escala, eles podem lhe poupar tempo!-)

 4
Author: Alex Martelli, 2009-08-14 19:09:41

O modelo de Objecto diz respeito aos três conceitos seguintes: Captação De Dados Encapsulamento Heranca O modelo relacional usou o conceito básico de uma relação ou tabela. Os produtos de mapeamento objeto-relacional (ou mapeamento) integram capacidades de linguagem de programação de objetos com bases de dados relacionais.

 2
Author: Hamza Riaz, 2017-04-19 06:13:15