[Linux-Biella] [vallini.daniele a bilug.it: [Bilug] Python]

vallini.daniele a bilug.it vallini.daniele a bilug.it
Mer 13 Ott 2021 08:16:38 CEST


Mon, Oct 11, 2021 at 12:19:50PM +0200  vallini.daniele a bilug.it ha scritto: 

> Mon, Oct 11, 2021 at 08:44:04AM +0000  maria teresa panunzio ha scritto: 
> 
> >        Dal mio punto di vista il confronto bash / python non sussiste,
> >        siccome bash conosce già le informazioni del database perché
> >        installato in locale e sulla macchina.
> >        Se fosse installato in un docker container, non sarebbe così facile
> >        l’interrogazione…così come se fosse installato in un altro server
> >        remoto
> 
> Nella discussione di sabato proprio questo si e' evidenziato:
> personalmente o lavoro in locale o lavoro su un server personale dove mi
> trovo come in locale dopo l'ingresso via ssh.
> 
> Nelle mie condizioni bash e' veloce ed affidabile con una sola riga di codice.
> 
> Chiaramente Python offre una soluzione valida in qualunque situazione ma,
> nel mio caso, richiede molte righe di codice in piu'.
> 
> Ho appena iniziato a programmare in python perche', per altri versi quali
> ottime librerie ne ho constatato la validita' e gia' le sto usando,
> prometto di approfondire appena posso.
> 
> Grazie Maria Teresa per l'intervento.


Mostro in python ed in bash la catena di query che utilizzo per una parte dell'acquisizione dati:


Python:

#! /usr/bin/python3.9
    
import pymysql.cursors
connection = pymysql.connect(host='localhost',
                             user='dan',
                             password='',
                             db='gp',
                             cursorclass=pymysql.cursors.DictCursor).
print ("database gp connected").
        
try:..
    with connection.cursor() as cursor:
        sql = "DROP TABLE IF EXISTS tmp;"
        cursor.execute(sql)
        connection.commit()
        print ("table tmp dropped")
        
    with connection.cursor() as cursor:.
        sql = "CREATE TABLE tmp (Date date,High double(10,4),Low double(10,4),Open double(10,4),Close double(10,4),Volume int,AdjClose double(10,4));"
        cursor.execute(sql)
        connection.commit()
        print ("table tmp created")
        
    with connection.cursor() as cursor:.
        sql = "LOAD DATA INFILE '/tmp/tmp.csv' INTO TABLE tmp FIELDS TERMINATED BY ',';"
        cursor.execute(sql)
        connection.commit()
        print ("data infile /tmp/tmp.csv loaded into table tmp")
        
    with connection.cursor() as cursor:.
        sql = "ALTER TABLE tmp ADD Id char(16) FIRST;"
        cursor.execute(sql)
        connection.commit()
        print ("added column id first into table tmp")
        
    with connection.cursor() as cursor:.
        sql = "UPDATE tmp SET Id='XXX';"
        cursor.execute(sql)
        connection.commit()
        print ("tmp.Id updated set Id=XXX")

    with connection.cursor() as cursor:.
        sql = "DELETE FROM tmp WHERE Date='0000-00-00';"
        cursor.execute(sql)
        connection.commit()
        print ("record deleted where Date=0000-00-00")

    with connection.cursor() as cursor:
        sql = "SELECT * FROM tmp;"
        cursor.execute(sql)
        connection.commit()
        print(cursor.fetchall())
        print ("all record selected")
finally:
    connection.close()


bash:

echo "
DROP TABLE IF EXISTS tmp;
CREATE TABLE tmp (Date date,High double(10,4),Low double(10,4),Open double(10,4),Close double(10,4),Volume int,AdjClose double(10,4));
LOAD DATA LOCAL INFILE '/gp/bin/yahoo3.csv' INTO TABLE tmp FIELDS TERMINATED BY ',';
ALTER TABLE tmp ADD Id char(16) FIRST;
UPDATE tmp SET Id='XXX';
DELETE FROM tmp WHERE Date='0000-00-00';
SELECT * FROM tmp;
" | mariadb gp -t


Sono alle prime armi e forse non ho ottimizzato il Python, forse si
poteva risparmiare qualche riga di codice pero', almeno per l'uso in
locale, bash mi pare strepitosamente efficiente.

Nulla da dire per altri contesti, Python mi pare elegante, efficiente e
ricco di eccellenti librerie aggiornate, temo che mettero' perl in
soffitta ma non la mia amata bash.

-- 
Daniele


Maggiori informazioni sulla lista Linux