[Python] python DB/TABLES ...
Daniele Varrazzo
piro a develer.com
Sab 11 Maggio 2013 16:26:41 CEST
On 2013-05-11 14:38, Remo The Last wrote:
> rispondo a tutti:
> chiedo scusa se non sono stato chiaro nel mio primo post.
>
> Devo
> iniziare a capire la creazione di DB in Python. Ne sono ignorante ma
> non sono un neofita della programmazione. E quello che mi serve è un
> buon inizio per imparare i DB relazionali in Python.
I db relazionali sono un mondo loro, e python è un mondo suo: non
impari "i db in python". Fanno due cose diverse, per cui convivono bene.
Se usi postgres (come detto da Manlio) hai il meglio che i db
relazionali possano offrire oggi. Io mantengo psycopg, il driver
python-postgres più usato, per cui se scegli questa strada penso tu sia
in una botte di ferro, sia come solidità delle tecnologie scelte che
come aiuto che puoi chiedere in giro (in lista ci sono altri utenti
"pesanti" di postgres). Psycopg ha ottima documentazione per quanto
riguarda l'integrazione python-postgres, postgres ha ottima
documentazione di suo... ma sterminata.
Fidati di quello che ti hanno risposto gli altri: tabelle che "cambiano
schema" a seconda dei dati contenuti sono solo il segnale di un problema
non definito bene. Non dico che non sia consentito cambiare idea mentre
si lavora, ma non è che i tuoi dati decideranno automaticamente lo
schema: casomai te lo suggeriranno.
> Praticamente
> devo creare una decina di tabelle con almeno una 30ina di campi
> all'interno di ogni tabella. Alcuni di questi campi sono uguali per
> tutte tabelle mentre altri campi saranno creati in funzione dei
> risultati delle elaborazioni. I contenuti dei campi creati saranno
> spesso tutti uguali, ma saranno identificati in maniera diversa per
> distinguere gli uni dagli altri. Dunque, nella la mia tabella dovrò
> creare in automatico dei campi per poter inserire (in funz. delle
> elaborazioni) dei dati che mi serviranno in seguito.
Un modo di risolvere il fatto di avere parte dei campi comuni si può
fare con una tabella di base che contiene la parte comune, più una serie
di tabelle in relazione 1-1 che contengono i campi estesi. Ma questo è
un modo di memorizzare dati polimorfi (è simile a una classe python con
delle sottoclassi che hanno attributi aggiuntivi) ma di cui conosci lo
schema, non dove le tabelle vengono estese quando lo decidono i dati.
Se in partenza non conosci lo schema, in postgres hai almeno due modi
di archiviare dati parzialmente strutturati, con la possibilità di
strutturarli in seguito al sorgere delle necessità: il tipo hstore
(http://www.postgresql.org/docs/9.2/static/hstore.html) è praticamente
un dizionario str -> str e consente di fare alcune ricerche indicizzate
(es. trovare i record che contengono la chiave 'x' oppure la chiave 'x'
col valore 'y'). Un altro è usare JSON
(http://www.postgresql.org/docs/9.2/static/datatype-json.html) e
memorizzare dati completamente non strutturati, ma per indicizzare
questi dati devi costruire degli indici ad hoc. psycopg offre
conversioni hstore <-> dict (con dizionari che contengono solo chiavi
str e valori str oppure None:
http://initd.org/psycopg/docs/extras.html#hstore-data-type) e
conversioni json <-> qualunque cosa supportata da funzioni load/dump:
http://initd.org/psycopg/docs/extras.html#json-adaptation).
> E le tabelle
> sono leggere; non saranno impegnative per la macchina.
>
> Insomma mi serve un buon inizio, facile, intuitivo e veloce
> nell'apprendimento.
Te l'hanno detto già in 40: evita le tabelle dinamiche e tutto sarà
facile. Prova la strada di tabelle che vengano estese automaticamente
e... saranno cazzi tuoi :)
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
Maggiori informazioni sulla lista
Python