Programavimas

SQLite duomenų bazės įvaldymas „Python“

SQLite duomenų bazės įvaldymas „Python“

SQLite yra reliacinė duomenų bazių valdymo sistema, pagrįsta SQL kalba; tai yra be serverio nulis konfigūracijos duomenų bazės variklis. Tai yra vienas iš populiariausių duomenų bazių variklių ir labai lengvai naudojamas mažose programose. Tai sukuria tik vieną disko failą, kuriame saugoma visa duomenų bazė, todėl failas yra nešiojamas. Jis naudojamas „Android“ OS kaip pagrindinis šaltinis duomenims saugoti. Jį „Google Chrome“ taip pat naudoja saugoti svetainės duomenis ir vartotojo duomenis, įskaitant slaptažodžius vietiniame kompiuteryje.

Išplėstinis darbas su „SQLite“ duomenų baze „Python“

Šioje pamokoje bus nagrinėjamos temos: vaizdų įterpimas į SQLite lentelę, duomenų bazėje esančių lentelių sąrašas, visų pakeitimų nustatymas nuo duomenų bazės prijungimo, atsarginės duomenų bazės atsarginės kopijos sukūrimas, SQLite duomenų bazės išmetimas, grąžinimas SQLite, ištrynimas įrašai iš lentelės, lentelės numetimas ir SQLite duomenų bazės išimtys.

Taip pat galite pamatyti pirmąją šios mokymo programos dalį, kurioje pateikiama SQLite pagrindai, jo naudojimo pranašumai, prisijungimas prie duomenų bazės failo, lentelės sukūrimas duomenų bazėje, duomenų įterpimas į lentelę, duomenų užklausa iš lentelės, lentelės atnaujinimas ir dar daugiau.

Failai ir vaizdai SQLite duomenų bazėje

Dirbant su duomenų bazėmis, yra situacijų, kai reikia įterpti vaizdus ar failus į duomenų bazę arba eksportuoti iš jos. Pavyzdžiui, jei kuriate duomenų bazę, kurioje saugomi darbuotojų duomenys, gali tekti į duomenų bazę įterpti kiekvieno darbuotojo nuotraukas.

Norėdami pridėti vaizdų į SQLite duomenų bazę, turime naudoti SQLite BLOB duomenų tipą. Duomenų tipas BLOB () naudojamas saugoti didelius objektus, paprastai didelius failus, tokius kaip vaizdai, muzika, vaizdo įrašai, dokumentai, PDF ir kt. Pirmasis žingsnis yra konvertuoti duomenis ir vaizdus į „Python“ baitų objektą, kuris yra panašus į „SQLite“ BLOB duomenų tipą. Prieš tęsdami, sukurkite lentelę pavadinimu studentas duomenų bazėje su laukais id, name, images, marks. Norėdami sukurti lentelę, paleiskite šį kodą.

importuoti sqlite3 conn = sqlite3.prisijungti ("pavyzdys.db ") print (" \ n [+] Sėkmingai prisijungta prie duomenų bazės ") cur = conn.cursor () print ("\ n [+] Žymeklis sėkmingai nustatytas") lentelė = cur.vykdyti ("" "CREATE TABLE studentas (id INT PAGRINDINIS RAKTAS, vardas TEXT, vaizdai BLOB, pažymi TEXT);" "") spausdinti ("\ n [+] Lentelė sėkmingai sukurta") cur.uždaryti () jung.įsipareigoti () jung.Uždaryti()

Ši programa sukurs naują lentelę su pavadinimu studentas. Terminale pamatysite tokį išėjimą.

Vaizdo įterpimas

Norėdami įterpti vaizdą į SQLite duomenų bazę, transformuokite vaizdą į pitono baito objektą ir tada įterpkite jį į vaizdų stulpelį, kuris priima BLOB duomenis. Paleiskite šį kodą, kad pridėtumėte vaizdą img.png duomenų bazėje naudojant „Python“.

importuoti sqlite3 conn = sqlite3.prisijungti ("pavyzdys.db ") jungtis.text_factory = str print ("\ n [+] Sėkmingai prisijungta prie duomenų bazės") cur = conn.žymeklio () spausdinimas ("\ n [+] žymeklis sėkmingai nustatytas") su atidarytu ("img.png "," rb ") kaip failas: duomenys = failas.read () python_tuple = (101, "robin", data, "90") print ("\ n [+] Vaizdas sėkmingai importuotas") print ("\ n [+] Dabar įterpiama į duomenų bazę") cur.vykdyti ("INSERT INTO student (id, name, images, marks) VALUES (?,?,?,?) ", python_tuple) print (" \ n [+] Duomenys sėkmingai įterpti ") cur.uždaryti () jung.įsipareigoti () jung.Uždaryti()

Ši programa įterps vaizdą į jūsų sukurtą studentų duomenų bazę. Pamatysite šią išvestį.

Pirmiau pateiktoje programoje atidarėme failą dvejetainiu režimu ir perskaitėme kiekvieną baitą bei saugome jį kintamajame duomenis. Tada mes naudojame tą kintamąjį INSERT sakinyje, norėdami įterpti vaizdą į duomenų bazę.

Gaunamas vaizdas

Norėdami atkurti vaizdą iš duomenų bazės, gaukite eilutę naudodami „select“ sakinį ir tada prieikite prie dvejetainių vaizdo duomenų į pitono kintamąjį, kuris bus saugomas vaizdo faile. Žr. Šį kodą iliustracijai.

importuoti sqlite3 conn = sqlite3.prisijungti ("pavyzdys.db ") jungtis.text_factory = str print ("\ n [+] Sėkmingai prisijungta prie duomenų bazės") cur = conn.žymeklis () spausdinti ("\ n [+] žymeklis sėkmingai nustatytas") spausdinti ("\ n [+] atkuriamas vaizdas") cur.vykdyti ("SELECT * FROM studentas") ret = cur.fetchall () for i in ret: data = i [2] su open ("img2.png "," wb ") kaip failas: failas.rašyti (duomenys) spausdinti ("\ n [+] Vaizdas išsaugotas") cur.uždaryti () jung.įsipareigoti () jung.Uždaryti()

Ši paprasta programa atgaus vaizdą iš duomenų bazės ir išsaugos jį diske, pavadintame img2.png. Taip pat galite pasirinkti kitą vaizdo failo pavadinimą. Programos išvestis parodyta žemiau.

Išvardinkite visas duomenų bazės lenteles

Duomenų bazėje galime sukurti daugybę lentelių. Taigi taip pat reikia išvardyti visas lenteles, esančias duomenų bazėje. Norėdami išvardyti duomenų bazėje esančias lenteles, pateikite užklausą lentelėje sqlite_master naudodami SQL sakinį SELECT. Užklausos sintaksė bus:

PASIRINKITE vardą iš sqlite_master WHERE type = "table"

Štai kaip mes naudojame šią užklausą, kad išvardytume visas mūsų duomenų bazėje esančias lenteles.

importuoti sqlite3 conn = sqlite3.prisijungti ("pavyzdys.db ") print (" \ n [+] Sėkmingai prisijungta prie duomenų bazės ") cur = conn.cursor () print ("\ n [+] Žymeklis sėkmingai nustatytas") cur.vykdyti ("SELECT name from sqlite_master where type =" table "") eilutės = cur.fetchall () print (eilutės) cur.uždaryti () jung.įsipareigoti () jung.Uždaryti()

Aukščiau pateiktame kode bus surašytos visos lentelės, esančios mūsų duomenų bazėje. Išvestis, kurią sukuria kodas, kai ji vykdoma, yra tokia. Priklausomai nuo duomenų bazėje sukurtų lentelių, galite pamatyti kitą išvestį.

Visų pokyčių, susijusių su prisijungimu prie duomenų bazės, nustatymas

Bet kokioje situacijoje naudinga nustatyti eilučių, kurios buvo pakeistos, įterptos ar ištrintos nuo duomenų bazės prijungimo, skaičių. Tam naudokite total_changes () ryšio objekto metodas, kuris grąžins visą duomenų bazės eilučių, kurios buvo paveiktos nuo ryšio, skaičių. Pažiūrėkime demonstracinį pavyzdį, kad sužinotume, kaip jis veikia.

importuoti sqlite3 conn = sqlite3.prisijungti ("pavyzdys.db ") jungtis.text_factory = str print ("\ n [+] Sėkmingai prisijungta prie abiejų duomenų bazių") cur = conn.kursoriaus () spausdinimas ("\ n [+] Abu žymeklis sėkmingai nustatyti") cur.vykdyti ("INSERT INTO student (id, name, images, marks, VAL) VALUES (140, 'David',", 99) ") cur.įvykdyti ("INSERT INTO student (id, name, images, marks) VALUES (150, 'Sam',", 97) ") pakeitimai = jungtis.total_changes print ("\ n [+] Bendras eilučių pakeitimų skaičius yra:", pakeitimai) jung.įsipareigoti () cur.uždaryti () jung.Uždaryti()

Pirmiau nurodyta programa atspausdins dabartinio ryšio eilučių pakeitimų skaičių. Pamatysite šią išvestį.

„SQLite“ grąžinimas

Kai reikia anuliuoti kai kurias užduotis, galite naudoti „rollback“ () funkciją. Šis metodas gali būti naudojamas anuliuoti užduotį, atliktą po paskutinio įsipareigojimo. Žr. Toliau pateiktą pavyzdį.

importuoti sqlite3 conn = sqlite3.prisijungti ("pavyzdys.db ") jungtis.text_factory = str print ("\ n [+] Sėkmingai prisijungta prie abiejų duomenų bazių") cur = conn.kursoriaus () spausdinimas ("\ n [+] Abu žymeklis sėkmingai nustatyti") cur.vykdyti ("INSERT INTO studentas (ID, vardas, atvaizdai, žymės) VALUES (100001, 'David',", 99) ") cur.vykdyti („INSERT INTO student (id, name, images, marks, VAL) VALUES (100002, 'Sam',", 97) ") jungtis.įsipareigoti () print ("\ n [+] Dvi eilutės sėkmingai įterptos") cur.pirmiausia („SELECT * FROM student“) įvykdyti = cur.fetchall () print ("\ n [+] Nauji įrašai duomenų bazėje yra:") i i pirma: print (i) cur.vykdyti („INSERT INTO student (id, name, images, marks, marks) VALUES (10003, 'Kishan',", 100) ") cur.vykdyti ("INSERT INTO studentas (ID, vardas, atvaizdai, žymės) VALUES (10004, 'Ankit',", 100) ") spausdinti (" \ n [+] Dvi eilutės įterptos sėkmingai, bet neįvykdytos ").rollback () print ("\ n [+] Mes grąžinome ankstesnes komandas, todėl nauji duomenys nebus įterpti") jungtis.įsipareigoti () cur.vykdyti ("SELECT * FROM studentas") sekundė = cur.fetchall () print ("\ n [+] Nauji įrašai duomenų bazėje yra:") i sekundei: print (i) cur.uždaryti () jung.Uždaryti()

Ankstesniame pavyzdyje pirmieji du įterpimo sakiniai įterps duomenis, kaip nurodyta, tačiau du paskutiniai įterpimo sakiniai bus atkuriami, todėl jie nepridės jokių duomenų į lentelę. Išvestis bus tokia, kaip parodyta žemiau.

Kurkite atsarginę duomenų bazės kopiją

Dirbant su duomenų baze, būtina padaryti atsarginę duomenų bazės kopiją. „Sqlite3“ modulis suteikia galimybę atlikti atsarginę duomenų bazės kopiją. Naudodamiesi ryšio objekto atsarginės kopijos () metodu, galime sukurti SQLite duomenų bazės atsarginę kopiją. Pagrindinė atsarginės kopijos metodo sintaksė yra:

atsarginė kopija (taikinys, *, puslapiai = 0, pažanga = nėra, vardas = „pagrindinis“, miego režimas = 0.250)

Pagal numatytuosius nustatymus arba kada puslapių yra arba 0 arba neigiamas sveikasis skaičius, visa duomenų bazė nukopijuojama vienu žingsniu, o tai geriau mažai duomenų bazei; priešingu atveju metodas atlieka ciklo kopijavimą iki puslapių tuo metu, kurį būtų galima padaryti naudojant didelę duomenų bazę. The vardas argumentas rodo duomenų bazės pavadinimą, kuris bus nukopijuotas: tai turi būti eilutė, kurioje yra numatytasis, nurodant pagrindinę duomenų bazę arba nurodant laikiną duomenų bazę. The miegoti argumentas nurodo miego laiką sekundėmis tarp bandymų sukurti likusių puslapių atsarginę kopiją. Tai gali būti sveikasis skaičius arba slankiojo kablelio reikšmė.

Padarykime atsarginę duomenų bazė.db duomenų bazę, kurią naudojome mokymo programoje.

importuoti sqlite3 conn_main = sqlite3.prisijungti ("pavyzdys.db ") conn_backup = sqlite3.prisijungti ("sample_backup.db ") print (" \ n [+] Sėkmingai prisijungta prie abiejų duomenų bazių ") cur_main = conn_main.žymeklis () cur_backup = conn_backup.cursor () print ("\ n [+] Abu žymeklis sėkmingai nustatyti") conn_main.atsarginė kopija (conn_backup, puslapiai = 0, progress = None, name = "main") spausdinti ("Duomenų bazės atsarginė kopija buvo sėkmingai atlikta") cur_main.uždaryti () cur_backup.uždaryti () conn_main.įsipareigoti () conn_backup.įsipareigoti () conn_main.uždaryti () conn_backup.Uždaryti()

Ankstesniame kode dvi duomenų bazės yra sujungtos, viena yra duomenų bazė, kurią norime padaryti atsarginę kopiją, ir antroji yra duomenų bazė, kurioje atliksime atsarginę kopiją. Naudoti atsarginė kopija () pirmojo duomenų bazės ryšio objekto atsarginės kopijos kūrimo būdas. Ši funkcija priima antrosios duomenų bazės ryšio objektą kaip tikslą sukurti atsarginę kopiją kitoje duomenų bazėje. Naudoti puslapiai = 0 argumentų, taigi procesas vyks vienu žingsniu, kuris yra rekomenduojamas mažoms duomenų bazėms. Ši programa sukurs naują duomenų bazės pavadinimo pavyzdį_ atsarginė kopija.db ir užpildykite pirmosios duomenų bazės atsarginę kopiją. Galite pamatyti, kad dabartiniame aplanke buvo sukurta nauja duomenų bazė, kurios failo dydis buvo toks pats kaip ankstesnio.

SQLite duomenų bazės išmetimas

Duomenų bazių išmetimas yra svarbi užduotis. Paprastai iškelties failas yra duomenų SQL sakinių rinkinys, kuris paprastai naudojamas atsarginėms kopijoms kurti. Duomenų bazę galime išmesti naudodami dump () metodą. Žr. Žemiau pateiktą pavyzdį, kad sužinotumėte, kaip mesti SQLite duomenų bazę.

importuoti sqlite3 con = sqlite3.prisijungti ("duomenų bazė.db ") su open ('dump.sql ',' w ') kaip f: linijai kon.iterdump (): f.rašyti ('% s \ n'% eilutė)

Pirmiau nurodyta programa išmes duomenų bazės pavyzdį.db, ir jis išsaugos išmestus duomenis į failą, pavadintą „dump“.kv. Galite pamatyti kataloge, kuriame yra „python“ failai, esančius duomenis ir atidaryti juos naudodami bet kurį teksto rengyklę.

SQLite3 vykdymo metany () metodas

The vykdytojas () metodas vykdo SQL komandą pagal visas parametrų sekas arba susiejimus, esančius sekoje parametrų sek. Kad būtų paprasčiau, šį metodą galima naudoti vykdant daugumą SQL komandų vienoje eilutėje. E.g., Naudodami šią komandą, per pitonų sąrašą galime įterpti bet kokį skaičių eilučių. Žr. Toliau pateiktą pavyzdį.

importuoti sqlite3 conn = sqlite3.prisijungti ("pavyzdys.db ") print (" \ n [+] Sėkmingai prisijungta prie duomenų bazės ") cur = conn.kursorius () print ("\ n [+] Žymeklis sėkmingai nustatytas") python_list = [(10000000, 'vivek', ", '10'), (100000001, 'rose',", '21'), (100000002, 'robin', ',' 31 '), (100000003,' Dev ',', '4'), (100000004, 'michael', ',' 52 ')] cur.vykdytojas ("INSERT INTO student (id, name, images, markes) VALUES (?,?,?,?) ", python_list) print (" \ n [+] Visi duomenys sėkmingai įterpti ") cur.uždaryti () jung.įsipareigoti () jung.Uždaryti()

Pirmiau nurodyta programa įterps visus duomenis, pateiktus pitonų sąraše. Programos produkcija yra parodyta žemiau.

Ištrinti įrašus iš lentelės

Norėdami ištrinti įrašus iš lentelės, galime naudoti DELETE operaciją. Mes galime greitai pašalinti eilutę naudodami DELETE operaciją su WHERE sąlyga. Pagrindinė sakinio DELETE sintaksė yra:

IŠTRINTI iš lentelės_pavadinimas WHERE some_condition;

Pažiūrėkime pavyzdį. Ištrinsime eilutę su ID 1001 iš mūsų duomenų bazės darbuotojų lentelės.

importuoti sqlite3 conn = sqlite3.prisijungti ("pavyzdys.db ") jungtis.text_factory = str print ("\ n [+] Sėkmingai prisijungta prie duomenų bazės") cur = conn.kursoriaus () spausdinimas ("\ n [+] žymeklis sėkmingai nustatytas") cur.vykdyti ("Ištrinti iš studento, kur id = 1001") spausdinti ("\ n [+] eilutė sėkmingai ištrinta") cur.vykdyti ("SELECT * FROM studentas") duomenys = cur.fetchall () duomenų eilutei: spausdinti (eilutė) cur.uždaryti () jung.įsipareigoti () jung.Uždaryti()

Minėtas kodas ištrins eilutę su ID 1001. Iš teiginio SELECT grąžinimo galite pamatyti, kad eilutė buvo pašalinta. Programos išvestis yra tokia, kaip parodyta žemiau.

Nuleiskite lentelę

Mes galime greitai mesti arba ištrinti lentelę naudodami SQLite DROP sakinį. DROP sakinio sintaksė yra tokia, kaip parodyta žemiau:

DROP lentelės lentelės_vardas 

Jei lentelės nėra, tada „SQLite“ išves klaidą, todėl, norėdami to išvengti, galime naudoti jei egzistuoja pažymėkite DROP sakinį. Žr. Žemiau esančią sintaksę:

DROP lentelė, jei yra lentelės_vardas

Pažiūrėkime, kaip galime naudoti šį teiginį su pitonu sqlite3 modulis ištrinti lentelę. Šioje programoje pašalinsime studentas lentelę, kurią sukūrėme anksčiau.

importuoti sqlite3 conn = sqlite3.prisijungti ("pavyzdys.db ") jungtis.text_factory = str print ("\ n [+] Sėkmingai prisijungta prie duomenų bazės") cur = conn.kursoriaus () spausdinimas ("\ n [+] žymeklis sėkmingai nustatytas") cur.vykdyti („NUOLAIDYTI LENTEL IF, JEI TURI studentą“) spausdinti („\ n [+] Lentelė sėkmingai nuleista“) cur.uždaryti () jung.įsipareigoti () jung.Uždaryti()

Pirmiau nurodyta programa ištrins lentelę studentas nuo pavyzdys duomenų bazė. Norėdami pamatyti, ar lentelė ištrinta, galime naudoti anksčiau matytą sąrašo lentelės komandą. Programos išvestis yra tokia, kaip parodyta žemiau.

SQLite duomenų bazių išimtys

Kai kurios SQLite duomenų bazės išimtys gali būti iškeltos dėl kažkokios klaidos. Pažiūrėkime šiek tiek, kada tos klaidos buvo išaiškintos.

Tai visų SQLite išimčių sąrašas; tas išimtis galime tvarkyti savo programose naudodami pagrindinį „Python“ bandymo / išskyrus klaidų tvarkymo metodą.

Išvada

Tai baigia išsamų vadovą apie pažangius darbo su SQLite metodais naudojant „Python“ metodus. Tikiuosi, kad išmokote visus „SQLite3“ aspektus naudodami „Python“, kuris padės mums sukurti fantastiškus „Python“ projektus.

Peržiūrėkite pelės mygtukus skirtingai programinei įrangai naudodami „X-Mouse Button Control“
Galbūt jums reikia įrankio, kuris galėtų pakeisti jūsų pelės valdymą kiekvienoje jūsų naudojamoje programoje. Tokiu atveju galite išbandyti programą, ...
„Microsoft Sculpt Touch“ belaidžio pelės apžvalga
Neseniai skaičiau apie „Microsoft Sculpt Touch“ belaidę pelę ir nusprendė ją nusipirkti. Kurį laiką naudojęs, nusprendžiau pasidalinti savo patirtimi....
„AppyMouse“ ekrano „Trackpad“ ir pelės žymeklis, skirtas „Windows“ tabletėms
Planšetinių kompiuterių vartotojai dažnai praleidžia pelės žymeklį, ypač kai įprasta naudoti nešiojamus kompiuterius. Jutiklinio ekrano išmanieji tele...