[Python] Mother

efphe effetom a gmail.com
Gio 9 Nov 2006 22:43:44 CET


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Ciao a tutti,

mi sono iscritto da una settimana circa in ML con l'intento di
promuovere un modulo python che sto scrivendo, con la speranza di
trovare qualche interessato con cui condividere l'avventura.

Mi e' gia' capitato di parlarne con Eriol.

Il modulo si chiama Mother ed e' un ORM, cioe' un'astrazione per il
linguaggio SQL, come SQLAlchemy o SQLobject.
Utilizza l'ottimo psycopg.

Il punto e' che ha delle caratteristiche peculiari e, spero, interessanti:

 * E' non tipato. Non occorre specificare il tipo dei campi delle
   tabelle.
 * E' non dichiarato: Mother e' introspettivo e conosce automaticamente
   i campi di ogni tabella. Questa grazie a un'inizializzazione,
   automatica, che viene eseguita una tantum.
 * Ogni classe puo' ottenere, senza necessita' di definizioni, i metodi
   per gestire automaticamente Figli, Relazioni e Join.
 * Connessione al DB persistente.
 * Un ottimo logger (speaker.py), che permette di loggare tramite
   syslog o su stdout.

Per il momento solo postgres e' supportato, ma l'esclusiva mi attrae
quasi :)

Mi chiedo se non ci sia interesse da parte della comunita' italiana
Python ad adottare il progetto, trasformandlo magari in una fucina
attraverso la quale si possa prima di tutto divertirsi e imparare, ma
anche portare avanti un progetto che potrebbe diventare piu' importante.
Per questo sono a vostra disposizione.

Al momento il codice e' accessibile tramite svn, (c'e' anche un Howto):

    $ svn co svn://siddharta.efphe.net/mother mother

Spero di non avervi annoiato troppo.
In seguito riporto qualche esempio (in verita' si tratta solo di qualche
comando minimale) di utlizzo, per chiarire meglio le
caratteristiche che ho cercato di descrivervi.

Ciao e buon lavoro

- --
efphe

#
## Esempi, ricorda che i tipi non contano...uso uno pseudo SQL
#
CREATE TABLE ABC (a,b,c);
CREATE TABLE DEF (d,e,f);
CREATE TABLE AD (a,d, a foreign key (ABC.a),d foreign key(DEF.d))

>>> MyAbc=ClsAbc(dict(a=1,b='ciao mondo',c=27))
>>> MyAbc.insert()
>>> MyDef=ClsDef(dict(d=2,e=78,f=42))
>>> MyDef.insert()
>>> # Ora chiamo un metodo mai definito, ma automaticamente
>>> # creato: crea un record in AD, mettendo in relazione
>>> # Abc con Def
>>> MyAbc.assignDef(MyDef)

>>> # Ora voglio ottenere tutti i record relazionati:
>>> # il metodo "joinDef()" e' gratuito e non occorre
>>> # definirlo
>>> MyAbc=ClsAbc(dict(a=1))
>>> MyDef_list= MyAbc.joinDef()
>>> # oppure
>>> MyDef_list= MyAbc.joinDef(filter="WHERE e=78")
>>> # oppure
>>> MyDef_list= MyAbc.joinDef(filter={e:78})


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFFU6EQi7obm7aBjHcRAmRTAJ0Q+x1UDFfBcZ3BT8GHnOwFWYm7TwCfQTuZ
wunl26ayJloYroCiLKFmLEY=
=25jM
-----END PGP SIGNATURE-----


Maggiori informazioni sulla lista Python