Quelqu'un m'a suggéré d'utiliser un ORM pour un projet que je conçois, mais j'ai du mal à trouver des informations sur son contenu ou son fonctionnement.
Quelqu'un peut-il m'expliquer brièvement ce qu'est un ORM, comment il fonctionne et comment commencer à l'utiliser?
Object-Relational Mapping (ORM) est une technique qui vous permet d'interroger et de manipuler les données d'une base de données à l'aide d'un paradigme orienté objet. Quand on parle d'ORM, la plupart des gens font référence à une bibliothèque qui implémente la technique de mappage relationnel-objet, d'où la phrase "un ORM".
Une bibliothèque ORM est une bibliothèque complètement ordinaire écrite dans la langue de votre choix et qui encapsule le code nécessaire à la manipulation des données, de sorte que vous n'utilisez plus le code SQL. vous interagissez directement avec un objet dans la même langue que vous utilisez.
Par exemple, voici un cas complètement imaginaire avec un pseudo langage:
Vous avez une classe de livre, vous voulez récupérer tous les livres dont l'auteur est "Linus". Manuellement, vous feriez quelque chose comme ça:
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);
}
Avec une bibliothèque ORM, cela ressemblerait à ceci:
book_list = BookTable.query(author="Linus");
La partie mécanique est traitée automatiquement via la bibliothèque ORM.
L'utilisation de ORM permet de gagner beaucoup de temps car:
L'utilisation d'une bibliothèque ORM est plus flexible car:
Mais ORM peut être une douleur:
for
.Eh bien, utilisez-en un. Quelle que soit la bibliothèque choisie, elles utilisent toutes les mêmes principes. Il y a beaucoup de bibliothèques ORM ici:
Si vous souhaitez essayer une bibliothèque ORM en programmation Web, vous feriez mieux d'utiliser une pile de structure complète telle que:
N'essayez pas d'écrire votre propre ORM, sauf si vous essayez d'apprendre quelque chose. C'est un travail gigantesque, et les anciens ont pris beaucoup de temps et de travail avant de devenir fiables.
Quelqu'un peut-il me donner une brève explication ...
Sûr.
ORM signifie "Object to Relational Mapping", où
La partie Object est celle que vous utilisez avec votre langage de programmation (python dans ce cas)
La partie relationnelle est un système de gestion de base de données relationnelle (une base de données existante). Il existe d'autres types de bases de données, mais la plus populaire est relationnelle (vous connaissez les tables, les colonnes, les fichiers fk, etc., par exemple Oracle MySQL, MS- SQL)
Et enfin la partie Mapping est l'endroit où vous faites un pont entre vos objets et vos tables.
Dans les applications où vous n'utilisez pas de structure ORM, vous le faites à la main. L'utilisation d'un cadre ORM vous permettrait de réduire le nombre de passions nécessaires pour créer la solution.
Alors disons que vous avez cet objet.
class Employee:
def __init__( self, name ):
self.__name = name
def getName( self ):
return self.__name
#etc.
et la table
create table employee(
name varcar(10),
-- etc
)
L'utilisation d'une structure ORM vous permettrait de mapper cet objet avec un enregistrement de base de données automatiquement et d'écrire quelque chose comme:
emp = Employee("Ryan")
orm.save( emp )
Et avoir l'employé inséré dans la base de données.
Oups, ce n'était pas si bref, mais j'espère que c'est assez simple pour attraper les autres articles que vous avez lus.
Un ORM (Object Relational Mapper) est une pièce/couche de logiciel qui permet de mapper vos objets de code sur votre base de données.
Certains traitent plus d'aspects que d'autres ... mais le but est de supprimer une partie du poids de la couche de données des épaules du développeur.
Voici un bref extrait de Martin Fowler (Data Mapper):
Modèles de mappeurs de données d'architecture d'application d'entreprise
Comme tous les acronymes, c’est ambigu, mais je suppose qu’ils veulent dire mappeur objet-relationnel - un moyen de couvrir vos yeux et de faire croire qu’il n’ya pas de code SQL en dessous, mais que ce sont tous des objets ;-). Pas vraiment vrai, bien sûr, et non sans problèmes - le très coloré Jeff Atwood a décrit ORM comme le Vietnam de CS ;-). Mais, si vous connaissez peu ou pas le SQL et avez un problème assez simple/à petite échelle, ils peuvent vous faire gagner du temps! -)
Le modèle d'objet concerne les trois concepts suivants Héritage de l'encapsulation d'abstraction de données Le modèle relationnel utilisait le concept de base d'une relation ou d'une table. Les produits de mappage OR (Object-Relational Mapping) intègrent les capacités du langage de programmation objet aux bases de données relationnelles.
Storm est une excellente option pour ceux qui utilisent python.
C'est un sujet énorme. Procurez-vous un bon livre d'hibernation et il devrait expliquer ORM en détail avant de passer à la matière hibernate Nitty Gritty.
DALMP http://code.google.com/p/dalmp/ pourrait convenir à php/mysql, qui gère actuellement de nombreux caches dorsaux comme redis/memcache/apc