.. _orm_genropy/orm_genropy/intro: Introduzione ============ Genropy implementa un proprio **ORM** (**Object-relational mapping**), cioè una serie di istruzioni ed uno stile di programmazione che permettono di mettere in comunicazione linguaggio e framework (con i loro paradigmi di programmazione tipicamente ad oggetti e data-driven) con i più comuni e importanti **RDBMS** (**Relational databases**). Vengono così forniti in modo semplice tutti i servizi necessari a gestione e memorizzazione dei dati senza dover conoscere nel contempo le specifiche caratteristiche implementative di ogni RDBMS utilizzato e riconosciuto da Genropy (*SQLite, PostgreSQL, MySQL, Microsoft SQL*). In particolare, l'ORM di Genropy consente la :ref:`definizione del modello` **interamente in Python**, riducendo quindi al minimo la programmazione in altri linguaggi. L'SQL necessario a eseguire :ref:`operazioni di lettura` e :ref:`scrittura` , infatti, è estremamente complesso oltre che laborioso: l'ORM di Genropy permette di rimanere molto vicini dal punto di vista semantico all'SQL originario, semplificando però e alleggerendo notevolmente sia la sintassi sia il processo. Inoltre, grazie al concetto di **path relazionale**, è possibile definire in modo logico e funzionale delle :ref:`relazioni` , con conseguente semplificazione di tutto il mondo delle :ref:`Operazioni di lettura` e :ref:`scrittura` : query anche complesse possono essere scritte in pochi istanti con una sintassi assolutamente semplice e senza avere l’appesantimento, anche in termini di prestazioni, che i classici ORM spesso comportano. L'oggetto db ------------ L'ORM di Genropy ha al suo centro l'oggetto ``db``. A titolo di esempio, proviamo in un qualsiasi terminale a istanziare l'applicativo (l'oggetto ``GnrApp``) passando il nome dell'istanza:: from gnr.app.gnrapp import GnrApp app = GnrApp('sandboxpg') Una volta istanziato l'oggetto *GnrApp*, ci concentriamo sull'oggetto ``GnrSqlDb``, ovvero il mapper corrispondente dal database dell'applicazione:: db = app.db Nel corso di questo manuale ci occuperemo quindi di analizzare l'architettura di questo oggetto *db*: vedremo innanzitutto :ref:`il model` , che approfondiremo nella sua suddivisione in :ref:`Structure e Object` , per poi arrivare alle :ref:`Operazioni di lettura` e :ref:`scrittura` sul database. .. sectionauthor:: Davide Paci e Danilo Magro