Šta je novo?

MySQL u SQLite

Vegeta

Cenjen
Učlanjen(a)
15.10.2011
Poruke
973
Poena
180
Potrebno mi je iz mysql baze podataka, odredene podatke prebaciti u SQLite bazu (radim na nekom projektu gde se koristi program koji podrzava samo SQLite). Ono sto sam ja uradio je sledece:
-uz pomoc python se konektujem na mysql bazu
-uradim query za odredenje vremenske intervale i rezultate sacuvam u dataFrame format.

Kod:
for k in t:
    
    query = ("SELECT si.base, MIN(o.tmin) AS tmin,MAX(o.tmax) AS tmax FROM nwp.var AS o " 
    +"JOIN nwp.forecast AS si ON o.id=si.id  WHERE base='" + k + "' AND valid BETWEEN DATE_SUB('"+ k + "', INTERVAL -1 DAY) "
    +"AND DATE_SUB('"+ k +"', INTERVAL -2 DAY) AND si=31464  AND model=4 ORDER BY si.valid")   

    df = pd.read_sql(query, con = mydb)
    
    for tMin in df.tmin:
        tempMin.append(tMin)
    for tMax in df.tmax:
        tempMax.append(tMax)

r = {'date': t1,'tmin':tempMin ,'tmax':tempMax}
dataframe = pd.DataFrame(r,columns=['date','tmin','tmax'])
mart = dataframe.set_index('date')

Ono sto me muci je sledece, da li nesto moze krenuti po zlu,tipa brisnje tj.prelazenje preko podatka unutar MySQL baze, ako podatke izlistane u dataframe pokusam sacuvati u SQLite ?
Ja sam radio save u txt, csv format:
Kod:
mart.to_csv("mart.csv",float_format='%.1f',sep='\t')
slican je postupak i za save u sqlite:
Kod:
df.to_sql()

Da li je sigurno radi ovako nesto, jer postupak zahteva otvaranje jos jedne konekcije, pored postojece za MySQL.

MySQL --> DataFrame --> SQLite
 
Poslednja izmena:
Ne vidim ništa pogrešno u ovome što radiš. Ako samo čitaš podatke iz MySQL zašto bi se nešto prepisalo? Imaćeš dve konekcije, jednu ka MySQL a drugu ka SQLite. Pandas (df) drži privremene podatke i presipa iz jedne konekcije u drugu.
 
Ne znam, ponekad nisam 100%. To sto si napisao sam i ja mislio, ali javila se ta mala nesigurnost.
Hvala puno na odgovoru!:Klanjanje
 
Svakako mozes napraviti backup baze pre akcije za svaki slucaj.
Ono sto ja cesto radim, napravim usera koji ima samo READ prava i onda uvek njega koristim kad radim query, da bi eleminisao bilo kakve probleme tog tipa.

Sent from my SM-G930F using Tapatalk
 
Možda sam ja old school I malo više obraziviji, a možda samo nisam neki ljubitelj pythona. U svakom slučaju ja BiH uradio dump MySQL baze. Sigurno ima alata koji mogu da to urade u vidu insert naredbi. Onda se nskacis na sqllite bazu (mislim da dbeaver može) i izvrši tu skriptu. Na ovaj način izbegqvaš aplikativni sloj i python. Ili iz python aplikacije pareirsj dump MySQL baze I insertuj u sqllite. Opet nećeš raditi konekciju na dve baze već samo na jednu, sigurno će biti bolje performanse.

Sent from my VOG-L29 using Tapatalk
 
Uradio sam to ovako(drugi je primer ali ce postupak biti isti):
Kod:
=======MySQL query============

query = ("SELECT si.si,si.base,si.model,MIN(o.tmin),MAX(o.tmax) FROM nwp.var AS o JOIN nwp.forecast AS si ON o.id=si.id" 
              +"WHERE base ='2020-04-04 00:00:00' AND si=31464 AND model=4")

=======dataFrame==============

df = pd.read_sql(query, con = mydb)

=======sqlite3 connect===========

conn = sqlite3.connect('TestDB1.db')

=======create sqlite table =========

c.execute('CREATE TABLE NWP (si,base,model,tmin,tmax )')
c = conn.cursor()
conn.commit()

=======write in to sqlite==========

df.to_sql("NWP",conn,if_exists="append",index=False)

Proslo sve kako treba, podaci ostali u MySQL a sacuvani su u SQLite :)
 
Poslednja izmena:
Odlicno sto si zavrsio ali generalno da svi znaju mene su tako neke oldschool kolege naucile samo uvek read only. nemas brige tad, ja tako nekad i preko njega pristupam i kad nesto vadim za analizu i brief chart-ove iz bp

Sent from my SM-G975F using Tapatalk
 
Nazad
Vrh Dno