I database

Che cosa sono e come posso crearli e gestirli

« Older   Newer »
 
  Share  
.
  1. vonkes
        Like  
     
    .

    User deleted


    Questo articolo spiega cosa sono i database e poi unisce le procedure scritte in python per crearli e gestirli si imparerete a gestirli e li potrete utilizzare esattamente come usate se li usate Acces, MySQL Oracle ecc ecc. Leggete attentamente e provate. Attendo commenti siano essi positivi o negativi,parlate senza alcun timore.

    Spesso si sente parlare di Databases e chi ne parla da per scontato che chi ascolta ne abbia perfettamente chiaro il concetto. Se ripenso al lontano 1984, quando appunto ho cominciato a sentire parlare di Databases, mi riviene alla mente il glorioso e famosissimo DBIII. Un linguaggio di programmazione che gestiva appunto i Databases. In effetti agli inizi quest'applicativo gestiva da riga di comando, stando nel proprio ambiente, le informazioni inerenti uno specifico argomento. Queste informazioni avevano una caratteristica comune e cioè di essere catalogate o schedate sotto nomi comuni (nel senso grammaticale più stretto del termine ).[Nome = parola o termine che individua un oggetto] [ Per le persone distinguiamo i Nomi Comuni di Persona e i Nomi Propri di persona. I primi indicano una o più peculiarità di quella o quelle persone, es. Maestro indica una persona che, almeno per uno specifico argomento, ha una conoscenza così approfondita che può insegnare quello specifico argomento a quella/e persona/e che, non lo conoscono o lo conoscono solo superficialmente,ma che desiderano essere edotti su quell'argomento.
    Il Nome proprio di persona per contro si riferisce a quella singola persona il cui Nome gli è stato imposto dalla nascita. E' vero che più persone possono avere lo stesso Nome, ma ciò non vuol dire che la loro peculiarità sia quella di chiamarsi tutti allo stesso modo quasi a voler individuare una specifica categoria. Il caso vuole che ci siano più persone che hanno lo stesso nome solamente perché cosi hanno voluto i reciproci genitori che hanno agito in quel modo forse l'una all'insaputa dell'altra e quasi certamente non sono parenti .
    Se per ipotesi cercassi il: Maestro Mario intenderei dire che vorrei prendere contatto, tra tutte quelle persone che hanno la peculiarità di essere Maestro, solamente con quello/i che si chiamano Mario. Poiché possono esserci più persone che sono Maestri e si Chiamano Mario posso affinare meglio la mia ricerca aggiungendo ancora qualche altra caratteristica di questa o queste persone come per esempio l'essere nato a Roma, e magari in un certo anno.
    Posso dire che per individuare una determinata persona debbo indicare alcune sue cartatteristiche o attributi; questo insieme di informazioni le posso raggruppare con la parola “Anagrafica” di una persona.
    Nome Comune, Nome Proprio, Professione, Nato a, Anno Nascita possono costituire le informazioni necessarie e sufficienti per individuare in maniera inequivocabile una persona ma solo in un determinato contesto e non in modo assoluto cioè nel genere umano. Scelto quindi il contesto, [per esempio una scuola, un ufficio, una professione] in questo contesto raccoglieremo tutte quelle informazioni relative a quelle persone le cui generalità sono contenute in Anagrafica.
    Questa raccolta di informazioni indipendentemente dove sono o saranno conservate ( su carta,su memorie magnetiche o altro) costituiscono:
    un DATABASE o una BASE di DATI

    Un esempio di Database su carta: Una Rubrica telefonica; Qui le informazioni vanno scritte nella stessa pagina che contiene il Cognome , Nome , N° telefono fisso e mobili eventuale indirizzo e città. Appaiono ordinate in maniera ascendette sul Cognome [ ascendente significa da A a Z]
    E' ovvio che se non conosciamo il Cognome dovremo sfogliare tutta la rubrica perché le altre informazioni non ci consentono di fare una ricerca.
    Fatta questa premessa introduttiva in merito alle informazioni raccolte in un DATABASE vediamo gli stessi concetti applicati alla memoria permanente di un Personal Computer e poi da qui anche sui Sistemi Client Server ecc e come realizzare procedure per gestirle.
    Capitolo 1

    Che cosa è un '''DataBase'''? [su memoria permanente di un PC]

    Un DataBase o DB è uno spazio dell'HD [Hard_Disk] dove vengono conservate in appositi contenitori le informazioni che verranno restituite su richiesta dell'utente. IL DB vero e proprio è il primo contenitore che individuiamo con un nome esattamente come si fa per una Directory o Cartella;
    Al suo interno trovano posto alcune Tabelle o File con un loro preciso nome e una estensione esattamente come tutti gli altri file. Nel nostro caso assumiamo che l'estensione sia 'txt'.
    Sì un file di testo come spiegherò più avanti. Ma anche le tabelle di Oracle,MySql, MSQL ecc sono sempre file di testo, anche se hanno estensioni diverse, le cui informazioni contenute sono trattate dai Motori dei DB in un determinato modo non ultimo anche ricorrendo alla criptografia.
    Facciamo un esempio:
    il nome del DB supponiamo sia Roma
    il nome delle Tabelle 1) Strurub.txt 2)Rubrica.txt

    Mentre per il DB non c'è nulla da dire trattandosi di una vera e propria Directory o Cartella , e per il quale valgono le medesime regole delle Directory, per le Tabelle o File, dove conserveremo le nostre informazioni, vediamo invece come devono essere inserite dette informazioni per poter essere restituite in maniera altrettanto semplice e facile a richiesta dell'utente:
    vediamo una Tabella esempio:
    Tabella esempio:
    pensiamo ad un foglio elettronico, è composto di righe e colonne simile ad un foglio excel :
    Le colonne saranno intestate, qui a solo titolo di esempio, per comprendere la necessità di dimensionarle in funzione dei dati che dovranno contenere.
    Le righe invece conterranno tutte le informazioni inerenti una persona.

    Ricordo che stiamo costruendo una tabella che dovrà fungere da rubrica telefonica e che dovrà contenere:
    Cognome,Nome,Indirizzo, Cap, Citta, Prov, Tel Fisso, Tel Mobile o Cell1,Cell2
    Le colonne a cui facevamo prima riferimento nel foglio tipo excel avranno questa intestazione e la singola Colonna per esempio Cognomi conterrà solo i cognomi, La Colonna Cap conterrà solo il cap ecc cioè solo informazioni inerenti la persona della quali voglio conservare traccia. Il singolo spazio che conterrà il dato appartenente alla riga 1 e alla colonna 1 viene spesso chiamato cella sulla falsa riga di ciò che avviene nel mondo foglio elettronico excel .
    Per distinguere in maniera inequivocabile una riga da un' altra useremo un codice composto da 4 caratteri numerici :[ al numero di caratteri che costituiscono questo codice non c'è limite preimposto]
    (es 0001, 0100, 8500 sono tutti identificativi di riga possibili).Il più alto Identificativo sarà 9999, il più basso sarà 0000; questo codice composto di sole cifre come esemplificato, va considerato come stringa o un insieme caratteri alfanumerici anche se appaiono solo cifre.
    Per quanto sopra la Tabella Rubrica.txt conterrà:
    Ideali reali
    Id_record: 0101
    Cognome: Rossi
    Nome: Natale
    Indirizzo: Via della Vittoria 35
    Cap: 20100
    Città: Bari
    Prov: Ba
    Tel_Fisso: 0567232417
    1_Cell: 3283525716
    2_Cell: 3384037936

    Ma c'è una informazione che ci consente di trovare in maniera inequivocabile la riga in cui sono contenute le informazioni inerenti a quella persona; questa informazione è contenuta nella colonna Id_Record che è stata inserita contestualmente a tutte le altre per cui ad esempio al momento dell'inserimento del Sig. Rossi è stato assegnato il codice 0387. Conosciuto questo codice ogni volta che ho bisogno del Sig. Rossi impongo la ricerca di questo codice 0387 ed anche se di Rossi c'è ne fossero presenti 4, io avrei sempre le informazioni giuste. Potremmo già dire di aver individuato un ottimo mezzo di ricerca alla singola riga o record. Ma nel caso voglia fare delle ricerche di record o persone che hanno in comune alcune informazioni la creazione di un indice mi aiuterebbe sia ad evitare di inserire dei doppioni, sia ad accelerare al massimo le ricerche. La velocità è in funzione del numero di record presenti nell'archivio. Immaginate se dovessi fare la ricerca sull'elenco telefonico di Roma( milioni di abbonati) per cap. L'indice mi associa tutti i record che hanno lo stesso cap e ciò indipendentemente da dove fisicamente si trovano sul HD. Per cui a priori avendo associato i record con lo stesso CAP al momento in cui il CAP del record si differenzia da quello imposto per la ricerca l'attività si ferma anche se ha selezionato 1000 record perche si è certi che i restanti record non potranno soddisfare la richiesta.
    Per ora tralasciamo questo argomento relativo all'indice per continuare nel nostro progetto

    Piccolo raffronto tra la rubrica telefonica cartacea e la nostra tabella Rubrica:
    Nella rubrica cartacea le informazioni le immettiamo in ordine alfabetico usando il cognome e poi tutte le altre perché il cognome è l'unico modo per ritrovare l' informazione: Supponiamo debbo trovare il Sig. Bianchi; nella rubrica lo cercherò sotto la lettera 'B' se è presente avrò anche tutte le altre informazioni che mi aiuteranno a capire se ho trovato la persona che cercavo, altrimenti continuerò a scorrere le righe sotto la lettera 'B' finché troverò la persona giusta. Se non è presente in rubrica ed io ho le informazioni, potrò scriverle, ma ,almeno in questa pagina, probabilmente non potrò rispettare l'ordine alfabetico. Per esempio Basile potrebbe trovarsi dopo Bucaneve.
    Nella Rubrica su [HD] i dati vengono immessi in ordine qualsiasi perché poi ci saranno le procedure di ricerca e gli indici che penseranno a trovarle oltre che per Cognome, anche per ognuna delle voci di cui sopra o con combinazioni di queste come sono intestate le colonne. Ovviamente se le procedure troveranno righe contenenti in alcune colonne le stesse informazioni, stessi cognomi e Nomi stesse città, le presenteranno tutte lasciando poi all'utilizzatore o utente di scegliere quella che corrisponde alle sue esigenze. Ovviamente le ricerche più sofisticate, o impostando le ricerche o query in maniera più appropriata sarà possibile essere soddisfatti.



    Queste informazioni, che in questo articolo appaiono messe una di seguito all'altra, su disco e precisamente nel file di testo Rubrica.txt vengono memorizzate una accanto all'altra.

    Ma ciò ha un duplice inconveniente:
    la lunghezza della riga varia in continuazione
    l' ampiezza di ogni singola cella dipende dalle informazioni che dovranno contenere.

    Per eliminare questi inconvenienti progettiamo nuovamente la nostra tabella in modo da avere costanti la lunghezza delle righe l'ampiezza delle colonne.
    Ecco come fare :


    Id_record: 4 caratteri di tipo alfanumerico
    Cognome: 20 caratteri di tipo alfanumerico
    Nome: 20 caratteri di tipo alfanumerico
    Indirizzo: 40 caratteri di tipo alfanumerico
    Cap: 5 caratteri di tipo alfanumerico
    Città: 20 caratteri di tipo alfanumerico
    Prov: 2 caratteri di tipo alfanumerico
    Tel_Fisso: 14 caratteri di tipo alfanumerico
    1_Cell: 12 caratteri di tipo alfanumerico
    2_Cell: 12 caratteri di tipo alfanumerico
    totale 149


    Abbiamo cosi disposto che le celle avranno in qualunque riga la stessa ampiezza, o meglio metteranno a disposizione per contenere le informazioni sempre gli stessi spazi ma nella immissione delle informazioni alcune celle saranno completamente piene altre no.
    Per esempio le celle intestate con Id_record saranno sempre piene con uno dei valori compresi tra 0000 e 9999 e cosi pure saranno piene le celle che conterranno i valori del Cap e della Prov.
    Mentre le altre saranno riempite con le informazioni che noi immetteremo: per esempio a Cognome potremmo immettere Rossi che occupa solo 5 caratteri oppure a Nome Marcello che occupa solo 8 caratteri.
    Per riempire tutta la cella possiamo aggiungere il carattere ' § 'che sicuramente non viene mai usato nelle nostre informazioni perchè non esiste nell'alfabeto sia Italiano che Internazionale ovviamente ripetuto tante volte quante ne mancano per riempire la cella così Cognome conterrà Rossi + '§§§§§§§§§§§§§§§'.
    Aggiungiamo [,] un carattere di separazione delle celle e poi i 2 caratteri [\n] per indicare il fine riga.In questo modo abbiamo progettato la tabella in cui le righe avranno lunghezza pari a tutte le ampiezze + tutti i separatori di cella più il fine riga e cioe 149 + 10 +2 = 161. Quindi ogni riga che immetteremo sarà lunga 161 caratteri.
    Il separatore va messo anche dopo l'ultima intestazione di colonna e prima dei caratteri di fine riga.
    !!!!Attenzione se con un editor qualsiasi andrete a verificare il contenuto del nostro file di testo non vedrete mai il carattere di fine riga. Ciò avverrà se il vostro editor non ha la funzione per visualizzare il carattere di fine riga. Le procedure lo troveranno e poi vedremo come toglierlo.
    Abbiamo completato cosi il progetto della tabella Rubrica.txt

    Per fare in modo di non dimenticare questo progetto lo memorizzeremo in un altro file di testo che chiamiamo Strurub.txt dove Strurub sta per Struttura Rubrica.
    Ora progettiamo Strurub.txt con le stesse regole sopraeposte
    Id_record: 4 caratteri alfanumerici
    Nome_colonna: 20 caratteri alfanumerici
    Tipo dell'informazione: 1 carattere alafanumerico: dati possibili potrà contenere
    ' A' per alfanumerico
    'N' per numerico,[ in questo caso nella lunghezza saranno
    compresi anche i decimali];
    Vediamo poi meglio nell'esempio qui sotto.
    Riepilogando e facendo riferimento al progetto della tabella rubrica, la nostra tabella Strurub.txt conterrà i seguenti dati:

    Id_record:0000 come per gli indici degli array o liste il primo elemento ha valore 0
    Nome Colonna: "Id_Record" Lunghezza: 20 tipo:A ora il file Strurub.txt conterrà

    0000,Id_record§§§§§§§§§§§,4§,A,§,\n
    0001,Cognome§§§§§§§§§§§§§,20,A,§,\n
    0002,Nome§§§§§§§§§§§§§§§§,20,A,§,\n
    0003,Indirizzo§§§§§§§§§§§,40,A,§,\n
    0004,Cap§§§§§§§§§§§§§§§§§,5§,A,§,\n
    0005,Citta§§§§§§§§§§§§§§§,20,A,§,\n
    0006,Prov§§§§§§§§§§§§§§§§,2§,A,§,\n
    0007,Tel_Fisso§§§§§§§§§§§,14,N,0,\n
    0008,Cell1§§§§§§§§§§§§§§§,12,N,0,\n
    0009,Cell2§§§§§§§§§§§§§§§,12,N,0,\n

    =N.B.=Ho volutamente inserito nel file Strurub.txt il tipo di dato per Tel_fisso e Cell1 e Cell2 come numerico per dimostrare come si inseriscono i dati di tipo numerico; nella casella dove ora appare lo zero potevano essere indicati i decimali cosa che per i numeri telefonici non esiste.
    Ora con la stessa logica simuliamo il riempimento delFile Rubrica.txt
    [ per questioni di spazio metterò i dati su due righe ma voi immaginateli sulla stessa riga come appaiono nel file realmente]

    0000,Rossi$$$$$$$$$$$$$$$,Gerardo$$$$$$$$$$$$$,Via delle favole di Esopo 24$$$$$$$$$$$
    20210,Milano$$$$$$$$$$$$$$,MI,02234567899$$$,3283435711$$,3383435711$$,\n
    0001,Bianchi$$$$$$$$$$$$$,Menelao$$$$$$$$$$$$$,Via delle favole di Fedro 88$$$$$$$$$$$
    00158,Roma$$$$$$$$$$$$$$$$,RM,06764567899$$$,3283438812$$,3393537711$$,\n

    Concludendo il nostro Progetto abbiamo:
    Il DATABASE o DB si chiama Roma ed è equivalente a creare una directory:
    Contiene 2 Tabelle o File: Rubrica.txt e Strurub.txt
    Ora mancano le procedure per costruire le Tabelle e le gestisca.
    Qui possiamo utilizzare diversi motori di Gestione dei DB come appunto:
    Access, MySql, MS SQL, ORACLE ecc.

    OPPURE creare in proprio le procedure usando magari il linguaggio Python secondo il progetto sopra indicato:

    Capitolo 2

    Ricordo che le tabelle Rubrica.txt e Strurub.txt sono semplici file di testo
    Gestione file di testo:
    In Python ma anche in altri linguaggi esitono delle funzioni che consentono la gestione dei file
    1) creazione di file file(nomefile.txt,modo)
    2) apertura di un file esistene open(nomefile.txt,modo)
    3) legge il file read()
    4) scrive nel file write(str)
    5) chiude il file close()

    queste sono alcune istruzioni in codice Python che saranno inserite nel programma vero e proprio più sotto:

    f= file('Rubrica.txt','w') #crea un file di testo nella directory corrente
    f= open(('Rubrica.txt','w') # è equivalente alla riga precedente
    f.write(str) # prima di scrivere cancella tutto quello che eventualmente era presente
    #str contiene le informazioni da inserire

    stiamo preparando la tabella Strurub le cui informazioni dovrebbero essere le seguenti
    Id_rec,Nome Colonna, lunghezza in car,tipo del dato,decimali,
    0000,Id_record , 4 ,A , § ,
    ma per rendere la riga sempre costante per tutto il file è necessario:
    utilizzare il carattere di riempimento [§] , il carattere di separazione colonne [,] e il carattere di fine riga [\n]
    ricordo la lunghezza di ciascuna colonna nella tabella Strurub.


    1 colonna 4 caratteri e non occorre il carattere di riempimento
    2 colonna 20 caratteri e qui occorre il carattere [§
    3 colonna 2 caratteri e qui occorre il carattere [§] solo per valore inferiori a 10
    4 colonna 1 carattere e non occorre il [§
    5 colonna 1 carattere presente solo se il tipo di dato della colonna precedente sarà di tipo numerico

    Codice Python
    #!/usr/bin/env/python
    questa istruzione sotto linux fa partire l'interprete sotto windows è un semplice commento
    #!/usr/bin/python
    questa istruzione sotto (linux ) UBUNTU fa partire l'interprete, sotto windows è un semplice commento
    # scriviamo ora il codice vero e proprio

    #! /usr/bin/python

    """
    programma per la costruzione e riempimento della tabella di struttura Strurub.txt
    nome del file o applicativo costrutabstru.py . [Il nome del file in maniera concisa dice cosa farà il file] [[BR]]


    realizzato da Antonio CHESSA il 26/08/2006
    revisionato i1 4/01/2010
    """
    import os,sys

    def normalizza(dato,quanti):
    a = quanti- len(dato)
    riempe ='§'
    dato = dato +(riempe*a)
    return dato

    # programma principale
    colonomi= ['Id_record','Campo','Lungo','Tipo','Decimali'] # sono i nomi delle colonne
    colonume= [4,20,2,1,1] # sono le ampiezze delle colonne
    sepa = ',' # carattere separatore di colonne
    fineriga ='\n' # caratteri di fine riga
    riga= ''
    j = 1
    f =open('Strurub.txt','a') # il parametro 'a' consente la scrittura [f.vrite(str)] #aggiungendo il parametro
    # '''str''' inga alla fine del file

    k= 1
    while k < 2:
    for i in range(len(colonomi)):
    while j < 2:#
    valore = raw_input ('[inserisci '+ colonomi[i]+ "] " )
    if len(valore) > colonume[i]:
    print 'valore errato; Inseriscilo nuovamente'
    continue
    else:
    break
    if len(valore)< colonume[i]:
    valore = normalizza(valore,colonume[i])
    print "Valore =",valore
    if valore == "0" or valore == '':
    valore = '$'
    riga = riga +valore+','
    print riga
    riga =riga +fineriga
    f.write(riga)
    riga = ''
    si = raw_input( "Hai finito di inserire la struttura della tabella rubrica? " )
    if si == "S" or si == 's':
    break

    print "La tabella Strurub è stata completata"
    --------

    ##ATTENZIONE inseriamo con molto piacere una versione più elegante rispetto a quella ### proposta, suggerita da ''' gennaro ''' del forum gruppo programmazione

    #! /usr/bin/python

    from re import match

    colonomi = ['Id_record','Campo','Lungo','Tipo','Decimali']
    colonume = [4,20,2,1,1]
    sepa = ','
    fineriga = '\n'
    riempe = '$'
    riga = ''
    strutab = open('Strurub.txt','a')


    def normalizza(dato,quanti):
    if match("^[0-9]+$",dato)!=None:
    dato=dato.zfill(quanti)
    else:
    a = quanti- len(dato)
    dato = dato +(riempe*a)
    return dato


    # programma principale
    while True:
    for i,v in enumerate(colonomi):
    while True:
    valore = raw_input ('inserisci '+ v + " ")
    if len(valore)<=colonume[i]:
    valore = normalizza(valore,colonume[i])
    if valore == '' : valore = riempie
    print "Valore = ",valore
    break
    else:
    print 'valore errato; Inseriscilo nuovamente'
    continue
    riga+=valore+sepa
    strutab.write(riga+fineriga)
    riga=""
    si = raw_input("Hai finito di inserire la struttura della tabella rubrica? ")
    if si in ["s",'S',"si","Si","SI"]:
    strutab.close()
    break

    print "La tabella Strurub e' stata completata"

    #--------------- fine dello script -----------------------


    #se consultate la tabella Strurub con un editor qualsiasi vedrete quanto segue:

    0000,Id_record$$$$$$$$$$$,4$,A,$,
    0001,Cognome$$$$$$$$$$$$$,20,A,$,
    0002,Nome$$$$$$$$$$$$$$$$,20,A,$,
    0003,Indirizzo$$$$$$$$$$$,40,A,$,
    0004,Cap$$$$$$$$$$$$$$$$$,5$,A,$,
    0005,Citta$$$$$$$$$$$$$$$,20,A,$,
    0006,Provincia$$$$$$$$$$$,2$,A,$,
    0007,Tel_fisso$$$$$$$$$$$,14,A,$,
    0008,Cell1$$$$$$$$$$$$$$$,12,A,$,
    0009,Cell2$$$$$$$$$$$$$$$,12,A,$,

    0gni riga è lunga 35 caratteri ed e composta da 4+20+2+1+1 +5[separatori] che vedete e 2 che non si vedono '\n'
    ora dobbiamo realizzare la tabella Rubrica la cui struttura sta nella tabella Strurub.txt

    Capitolo 3
    Preparazione della Tabella Rubrica.txt e inserimento dati

    Codice Python

    #! /usr/bin/python
    """
    programma per la creazione e gestione della tabella Rubrica.txt
    nome del programma gestiorubri.py
    realizzato da Antonio CHESSA il 27/08/2006
    revisionato il 4/01/2010
    """
    import os,sys
    import string


    def leggotabstru(tab,modo):
    f=open(tab,modo)
    i = 0
    valori= []
    tuttidati=[]
    while i<1:
    riga =f.readline()
    if not riga:
    f.close()
    break
    #metto le informazioni separate da virgole in un array
    # ma prima lo libero dei caratteri di fine riga
    riga = riga[:-2]
    lista = string.split(riga ,sep = ",")
    #tolgo da ogni elemnto di riga i caratteri di riempimento
    valori = elimiriempi(lista)
    #print'valori =',valori
    tuttidati.append(valori)
    return tuttidati

    def elimiriempi(lista):
    valore =[]
    valpul =""
    j = 0
    #print " len(lista) =",len(lista)
    while j < len(lista):
    #j =string.find(lista[j],"&")
    valpul =string.rstrip(lista[j], "$")
    #print "valpul = ",valpul
    valore.append(valpul)
    valpul =""
    j=j+1
    #print " j = ",j
    return valore



    def creorubri():

    tab = 'Rubrica.txt'
    dir = os.getcwd( )
    lista = os.listdir(dir)
    if not tab in lista:
    f =file(tab,'w')
    file.close(f)
    print "creata la tabella ",tab
    else:
    print "la Tabella "+tab +" già esiste "
    return(tab)

    def normalizza(dato,quanti):
    a = int(quanti)- len(dato)
    riempe ='$'
    dato = dato +(riempe*a)
    return dato


    #programma principale
    # creo tabella Rubrica.txt
    tab = creorubri()
    print tab
    # prendo informazioni da Strurub per gestire l'input dati in Rubrica
    # riga e' un array
    # riga[1] = Nome del campo
    # riga [2]= lunghezza del campo
    # riga[3] = tipo del campo
    # riga[4] = decimali se numerico
    riga =[]
    tab = "Strurub.txt"
    riga= leggotabstru(tab,'r+')
    #print 'riga ',riga
    #print
    nuariga =''
    sepa =','
    fineriga = '\n'

    # preparo per l'input da memorizzare in Rubrica.txt
    tab ='Rubrica.txt'
    f= open(tab,'a')
    k = 0
    while k<1:
    for i in range(len(riga)):
    j=0
    while j < 1:
    etica = riga[i][1]
    lungo = riga[i][2]
    tipo = riga[i][3]
    varia = raw_input( etica+ " [max "+lungo +" car tipo "+tipo+ "] " )
    si = raw_input ("Dato esatto? conferma con S ")
    if si =="S" or si =="s":
    # deve aggiungere il carattere di riempimento ecc e poi lo può scrivere sulla rubrica
    if i > 0:
    varia = normalizza(varia,lungo)
    nuariga = nuariga+varia+sepa
    break
    nuariga =nuariga+fineriga
    print 'nuariga =',nuariga
    f.write(nuariga)
    si =raw_input ("Nuovi dati da immettere in rubrica? conferma con S ")
    if si =="S" or si =="s":
    continue
    else:
    break
    f.close()


    Capitolo 4

    Per coloro che desiderano provare e verificare l'uso di Python con il DB MySQL ho scritto questo piccolo programmino che ho Chiamato Prova_Mysql.py . Do per scontato che abbiate installato sia MySQL che l'interfaccia per Python MySQLDB se non è così allora prima provvedete ad installarli e poi potete provare questo script.

    #! /usr/bin/python
    """
    prova_Mysql.py
    realizzato da Antonio CHESSA il 27/08/2006
    revisionato il 4/01/2010
    """



    import os,sys
    import funzioni
    import MySQLdb

    def esamina(qry):
    print 'la qry era =',qry
    val = funzioni.eseguiquery(qry)
    print 'val =',val
    # valori restituiti da varie query
    #programma principale o main
    doma =[]
    doma.append( "CREATE DATABASE Paolo")
    doma.append( "SHOW DATABASES")
    doma.append( "USE Paolo")
    doma.append( "CREATE TABLE pippo (cognome VARCHAR(20),nome VARCHAR(20))")
    doma.append( "SHOW TABLES ")
    doma.append( "DESCRIBE pippo")
    doma.append( "Insert into pippo (cognome,nome) values ('Piccolini','Gennarino')")
    doma.append( "SELECT * from pippo")
    doma.append( "UPDATE pippo set cognome = 'Grandetti',nome ='Luigino'")
    doma.append( "SELECT * from pippo")
    doma.append( "DROP DATABASE Paolo")



    for i in range (len(doma)):
    qry = doma[i]
    esamina(qry)
    a= raw_input("batti un tasto " )

    questo secondo programmino deve essere messo nella stessa directory dove metete il precedente con il nome funzioni.py
    #! /usr/bin/python
    """
    programma funzioni.py
    realizzato da Antonio CHESSA il 27/08/2006
    revisionato il 4/01/2010
    """
    import os,sys
    import MySQLdb
    import string

    host="" #IP del server MySQL
    user="root" #Nome utente
    passwd="vosra password" # inserite la vs Password
    db="" # il nome della dir che contiene la tabella oggetto della query per la prova non occorre
    try:
    s = MySQLdb.connect(host=host,user=user,passwd=passwd,db=db)
    cur = s.cursor()
    print "connessione avvenuta "
    except:
    print "sono qui e la connessione non e' riuscita "
    avviso = "Si e' verificato un errore durante la connessione al DB "+db
    print avviso

    def eseguiquery(qry):

    try:
    cur.execute(qry)
    rec = cur.fetchall()
    if "UPDATE" in qry or "INSERT" in qry:
    rec = "OK"
    return rec
    except:
    avviso = "Si e' verificato un errore durante la query "+qry
    print avviso
    try:
    #msg.ShowModal()
    rec="ERRORE"
    return rec
    finally:
    #msg.Destroy()
    pass

    def leggestrutab(qry):
    try:
    print "sono qui in funzioni"
    cur.execute(qry)
    rec = cur.fetchall()
    print "rec =",rec
    print "preparo struttura"
    nome = ""
    tipo = ""
    lungo = ""
    stru1 = []
    stru2 = []
    print "len(rec)",len(rec)
    for i in range( len(rec)):
    print str(i)+ " "+str(rec[i][0])+" "+str( rec[i][1])
    nome=(str(rec[i][0]))
    n= string.index(str(rec[i][1]),"(")
    tipo=((str(rec[i][1]))[0:n])
    lungo=((str(rec[i][1]))[n+1:-1])
    stru1.append(nome)
    stru1.append(tipo)
    stru1.append(lungo)
    stru2.append(stru1)
    stru1=[]
    print "stru2 ",stru2
    return stru2


    except:
    avviso = "Si e' verificato un errore controlla la query "+qry
    #msg = wx.MessageBox( avviso, 'Avviso',wxOK | wxICON_ERROR)
    print avviso
    try:
    rec="ERRORE"
    return rec
    finally:
    return rec


    Ci sono alcune istruzioni precedute dal segno # che le fa vedere a Python come commenti;
    trattasi di istruzioni che funzionano quando vengono importate le librerie wxPython che in questi piccoli esempi non sono state allegate per non appesantire troppo i programmi. Costituiscono comunque parte integrante dei file oggetto delle discussioni nel forum di programmazione in UBUNTU-Linux.

    Spero di aver fatto cosa gradita a chi fosse interessato sia alla programmazione sia alla gestione dei Database sia di propria realizzazione sia per l'uso con MySQL un signor Database

    Ciao a tutti e aspetto i vostri commenti
    Vonkes vecchio clipparolo nuovo pythoniano

    Edited by vonkes - 29/10/2010, 11:46
     
    .
  2. Diosantos
        Like  
     
    .

    User deleted


    Ottimo complimenti :)

    Diosantos from Jamaica !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    .
  3. vonkes
        Like  
     
    .

    User deleted


    Ringrazio Diosantos per i complimenti mi piacerebbe poter approfondire questo argomento con qualcuno interessato, magari per realizzare qualche applicativo semplice per poter provare quanto dico.
    Per chi fosse interessato sto portando avanti anche un database utilizzando il vecchio formato DBIII opportunamente modificato per consentire una certa assomiglianza a MySQL anche se non ha la minima pretesa di essere efficiente come quella procedura. Tutto è migliorabile e se riesco a realizzare anche gli indici magari nel formato clipper diventerà un interessantissimo DB. Forse molti concetti di Questo aggiornamento possono essere estesi anche al mio archivio realizzato con i file di testo di cui si parla nel mio articolo.
    Aspetto altri commenti un po più interessati
    Ciao per ora e come dicono in Sardegna "" A SI BIRI" = arrivederci
    vonkes sempre più vecchio clipparolo e giovane pythoniano o pythonista
     
    .
  4. Diosantos
        Like  
     
    .

    User deleted


    Mi studierò per bene i database e altri 2-3 linguaggi di scrittura tra cui il python quando avrò tempo spero presto, purtroppo prima mi devo levare di torno interrogazioni e compiti in classe a scuola :D ..fin'ora ho studiato L'xhtml(che non serve quasi +..), il php e css. Linguaggi abbastanza semplici..spero non sia troppo difficile il python, non perchè non lo capisco se è difficile ma perchè lo voglio imparare subito per mettermi all'opera !! :lol:

    Diosantos

    PS: Di che zona sei della sardegna?
     
    .
  5. vonkes
        Like  
     
    .

    User deleted


    Ciao Diosantos sono nato a Cagliari e ho abitato in detta cità fino all'età di 14 anni e da allora vivo a Roma. Tu, diimmi qualcosa di te, età che tipo di scuola frequenti passione per il P.C. e per altry Hobby. Per quanto riguarda lìimparare sia i DB che Python ne possiamo parlare ovviamente sempre quando tu vorrai e quando non sei troppo impegnato con la scuola. Sul mio sito www.cmqlibero.com puoi trovare sia programmazione sia DB oltre ovviamente anche lezioni di Maremarica e Topografia ma poi qualunque problema tu abbia parlamene vedrai che una soluzione la troviamo sempre.
    In attesa di leggerti mi è gradita l'occasione per salutarti
    vonkes vecchio clipparolo nuovo pythoniano o pythonista.
    P.S. mi piacerebbe avere uno skin tipo quello di questo forum da mettere nel mio sito; puoi aiutarmi?
    Ciao Grazie
    vonkes


    Diosantos se vuoi possiamo sentirci e vederci su messanger mi trovi con la mia mail che conosci sicuramente
    vonkes
     
    .
4 replies since 29/10/2010, 01:11   364 views
  Share  
.