Programiranje

Ovladavanje bazom podataka SQLite u Pythonu

Ovladavanje bazom podataka SQLite u Pythonu

SQLite je relacijski sustav upravljanja bazama podataka zasnovan na SQL jeziku; to je motor bez baze podataka, bez konfiguracije. To je jedan od najpopularnijih motora baza podataka i vrlo se lako koristi u malim aplikacijama. Stvara samo jednu datoteku diska za pohranu cijele baze podataka, što datoteku čini prijenosnom. Koristi se u OS Android kao primarni izvor za pohranu podataka. Također ga koristi Google Chrome za pohranu podataka o web mjestu i korisničkih podataka, uključujući lozinke u lokalnom stroju.

Napredni rad s bazom podataka SQLite u Pythonu

U ovom vodiču teme koje će biti obrađene su: umetanje slika u SQLite tablicu, navođenje tablica prisutnih u bazi podataka, utvrđivanje ukupnih promjena od povezivanja baze podataka, izrada sigurnosne kopije baze podataka, izbacivanje SQLite baze podataka, vraćanje u SQLite, brisanje zapisi iz tablice, ispuštanje tablice i izuzeci baze podataka SQLite.

Možda ćete htjeti vidjeti i prvi dio ovog vodiča koji predstavlja osnove SQLitea, Prednosti njegove upotrebe, Povezivanje s datotekom baze podataka, Stvaranje tablice u bazi podataka, Umetanje podataka u tablicu, Traženje podataka iz tablice, Ažuriranje tablice i još mnogo toga.

Datoteke i slike u bazi podataka SQLite

Tijekom rada s bazama podataka postoje situacije kada trebate umetnuti slike ili datoteke u bazu podataka ili izvesti iz nje. Na primjer, ako stvarate bazu podataka za pohranu podataka o zaposlenicima, možda ćete također trebati umetnuti slike svakog zaposlenika u bazu podataka.

Da bismo dodali slike u SQLite bazu podataka, trebamo koristiti BLOB vrstu podataka SQLite. Vrsta podataka BLOB () koristi se za pohranu velikih objekata, obično velikih datoteka, kao što su slike, glazba, videozapisi, dokumenti, PDF itd. Prvi je korak pretvoriti podatke i slike u bajtni objekt Pythona, koji je sličan BLOB tipu podataka SQLite. Prije nastavka izradite tablicu s imenom student u bazi podataka s poljima id, ime, slike, oznake. Pokrenite sljedeći kod za stvaranje tablice.

uvoz sqlite3 conn = sqlite3.povezati ("uzorak.db ") print (" \ n [+] Uspješno povezan s bazom podataka ") cur = conn.cursor () print ("\ n [+] Pokazivač je uspješno postavljen") tablica = cur.execute ("" "CREATE TABLE student (id INT PRIMARY KEY, name TEXT, images BLOB, marks TEXT);" "") print ("\ n [+] Tablica je uspješno kreirana") cur.close () conn.commit () conn.Zatvoriti()

Ovaj će program stvoriti novu tablicu s imenom student. U terminalu ćete vidjeti sljedeći izlaz.

Umetanje slike

Da biste umetnuli sliku u SQLite bazu podataka, transformirajte je u python byte objekt, a zatim je umetnite u stupac images koji prihvaća BLOB podatke. Pokrenite sljedeći kod da biste dodali sliku img.png u bazi podataka koristeći Python.

uvoz sqlite3 conn = sqlite3.povezati ("uzorak.db ") povez.text_factory = str print ("\ n [+] Uspješno povezan s bazom podataka") cur = conn.cursor () print ("\ n [+] Kursor je uspješno postavljen") s open ("img.png "," rb ") kao datoteka: podaci = datoteka.read () python_tuple = (101, "robin", podaci, "90") print ("\ n [+] Slika je uspješno uvezena") print ("\ n [+] Sada se ubacuje u bazu podataka") cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (?,?,?,?) ", python_tuple) print (" \ n [+] Podaci su uspješno umetnuti ") cur.close () conn.commit () conn.Zatvoriti()

Ovaj će program umetnuti sliku u studentsku bazu podataka koju ste stvorili. Vidjet ćete sljedeći izlaz.

U gornjem programu otvorili smo datoteku u binarnom načinu i pročitali svaki bajt te ga pohranili u varijablu podaci. Zatim koristimo tu varijablu u izrazu INSERT za umetanje slike u bazu podataka.

Dohvaćanje slike

Da biste dohvatili sliku iz baze podataka, dohvatite red pomoću naredbe select, a zatim pristupite binarnim podacima slike u python varijablu koja će biti pohranjena u datoteku slike. Pogledajte sljedeći kod za ilustraciju.

uvoz sqlite3 conn = sqlite3.povezati ("uzorak.db ") povez.text_factory = str print ("\ n [+] Uspješno povezan s bazom podataka") cur = conn.cursor () print ("\ n [+] Pokazivač je uspješno postavljen") print ("\ n [+] Dohvaćanje slike") cur.izvršiti ("SELECT * FROM student") ret = cur.fetchall () za i in ret: data = i [2] s open ("img2.png "," wb ") kao datoteka: datoteka.write (data) print ("\ n [+] Slika je spremljena") cur.close () conn.commit () conn.Zatvoriti()

Ovaj jednostavni program dohvatit će sliku iz baze podataka i spremiti je na disk nazvan img2.png. Također možete odabrati drugo ime za slikovnu datoteku. Rezultat programa prikazan je u nastavku.

Navedite sve tablice baze podataka

U bazi podataka možemo stvoriti brojne tablice. Dakle, također je potrebno navesti sve tablice prisutne u bazi podataka. Da biste popisali tablice prisutne u bazi podataka, upite tablicu sqlite_master pomoću naredbe SELECT SQL-a. Sintaksa upita bit će:

ODABERITE ime IZ sqlite_master WHERE type = "table"

Evo kako koristimo ovaj upit za popis svih tablica prisutnih u našoj bazi podataka.

uvoz sqlite3 conn = sqlite3.povezati ("uzorak.db ") print (" \ n [+] Uspješno povezan s bazom podataka ") cur = conn.cursor () print ("\ n [+] Pokazivač je uspješno postavljen") cur.izvrši ("ODABERI ime iz sqlite_master gdje je tip =" tablica "") redovi = cur.fetchall () ispis (redovi) cur.close () conn.commit () conn.Zatvoriti()

Gornji kod popisat će sve tablice prisutne u našoj bazi podataka. Izlaz koji kod stvara kada se izvrši je sljedeći. Možda ćete vidjeti neke druge rezultate, ovisno o tablicama koje ste stvorili u bazi podataka.

Identificiranje ukupnih promjena od povezivanja s bazom podataka

U bilo kojoj je situaciji korisno utvrditi broj redaka koji su izmijenjeni, umetnuti ili izbrisani otkad je baza podataka povezana. Za to upotrijebite ukupne_promjene () metoda objekta povezivanja, koja će vratiti ukupan broj redaka baze podataka koji su pogođeni od povezivanja. Pogledajmo primjer demonstracije kako bismo znali kako to radi.

uvoz sqlite3 conn = sqlite3.povezati ("uzorak.db ") povez.text_factory = str print ("\ n [+] Uspješno povezan s obje baze podataka") cur = conn.cursor () print ("\ n [+] Oba su pokazivača uspješno postavljena") cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (140, 'David',", 99) ") cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (150, 'Sam',", 97) ") promjene = conn.total_changes print ("\ n [+] Ukupno sada izmjena redaka je:", promjene) conn.commit () cur.close () conn.Zatvoriti()

Gornji program ispisat će broj promjena redaka u trenutnoj vezi. Vidjet ćete sljedeći izlaz.

Vraćanje u SQLite

Što se tiče poništavanja nekih zadataka, možete koristiti funkciju vraćanja (). Ovom se metodom mogu poništiti zadaci izvršeni nakon zadnjeg urezivanja. Pogledajte primjer u nastavku za ilustraciju.

uvoz sqlite3 conn = sqlite3.povezati ("uzorak.db ") povez.text_factory = str print ("\ n [+] Uspješno povezan s obje baze podataka") cur = conn.cursor () print ("\ n [+] Oba su pokazivača uspješno postavljena") cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (100001, 'David',", 99) ") cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (100002, 'Sam',", 97) ") conn.commit () print ("\ n [+] Dva reda uspješno su umetnuta") cur.izvršiti ("SELECT * FROM student") first = cur.fetchall () print ("\ n [+] Novi zapisi u bazi podataka su:") za i in first: print (i) cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (10003, 'Kishan',", 100) ") cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (10004, 'Ankit',", 100) ") print (" \ n [+] Dva reda uspješno su umetnuta, ali nisu počinjena ") conn.rollback () print ("\ n [+] Vratili smo prethodne naredbe tako da novi podaci neće biti umetnuti") conn.commit () cur.izvršiti ("SELECT * FROM student") second = cur.fetchall () print ("\ n [+] Novi zapisi u bazi podataka su:") za i u sekundi: print (i) cur.close () conn.Zatvoriti()

U gornjem primjeru, prva dva izraza za umetanje umetnut će podatke prema zadanom, ali zadnja dva izraza za umetanje bit će vraćena, tako da neće dodavati nikakve podatke u tablicu. Izlaz će biti kako je prikazano u nastavku.

Napravite sigurnosnu kopiju baze podataka

Tijekom rada s bazom podataka bitno je napraviti sigurnosnu kopiju baze podataka. Modul sqlite3 pruža funkciju za izradu sigurnosne kopije baze podataka. Pomoću metode backup () objekta povezivanja možemo napraviti sigurnosnu kopiju baze podataka SQLite. Osnovna sintaksa metode izrade sigurnosne kopije je:

sigurnosna kopija (target, *, pages = 0, progress = None, name = "main", sleep = 0.250)

Prema zadanim postavkama ili kada stranice su bilo 0 ili negativan cijeli broj, cijela baza podataka kopira se u jednom koraku, što je poželjno za malu bazu podataka; u suprotnom, metoda izvodi kopiranje petlje do stranice u vrijeme kada se to moglo učiniti s opsežnom bazom podataka. The Ime argument pokazuje ime baze podataka koje će se kopirati: to mora biti niz koji sadrži ili zadanu, da označi glavnu bazu podataka ili da označi privremenu bazu podataka. The spavati argument navodi vrijeme u mirovanju između pokušaja sigurnosne kopije preostalih stranica. To može biti cijela vrijednost ili vrijednost s pomičnim zarezom.

Uzmimo sigurnosnu kopiju baza podataka.db baza podataka koju smo koristili u vodiču.

uvoz sqlite3 conn_main = sqlite3.povezati ("uzorak.db ") conn_backup = sqlite3.povezati ("sample_backup.db ") print (" \ n [+] Uspješno povezan s obje baze podataka ") cur_main = conn_main.cursor () cur_backup = conn_backup.cursor () print ("\ n [+] I kursor je uspješno postavljen") conn_main.sigurnosna kopija (conn_backup, pages = 0, progress = None, name = "main") print ("Baza podataka uspješno je sigurnosno kopirana") cur_main.close () cur_backup.close () conn_main.commit () conn_backup.commit () conn_main.close () conn_backup.Zatvoriti()

U gornjem kodu dvije su baze podataka povezane, jedna je baza podataka od koje želimo napraviti sigurnosnu kopiju, a druga baza podataka u kojoj ćemo uzeti sigurnosnu kopiju. Koristiti sigurnosna kopija () metoda prvog objekta veze baze podataka za izradu sigurnosne kopije. Ova funkcija prihvaća objekt povezivanja druge baze podataka kao cilj za stvaranje sigurnosne kopije na drugoj bazi podataka. Koristiti stranice = 0 argumenata, tako će se postupak odvijati u jednom koraku, što se preporučuje za male baze podataka. Ovaj program će stvoriti novi uzorak imena baze podataka_rezervna kopija.db i napunite ga sigurnosnom kopijom prve baze podataka. Možda ćete vidjeti da je u trenutnoj mapi stvorena nova baza podataka iste veličine datoteke kao i prethodna.

Izbacivanje SQLite baze podataka

Bacanje baza podataka važan je zadatak. Dump datoteka je obično skup SQL izraza podataka, koji se obično koristi za izradu sigurnosnih kopija. Bazu podataka možemo izbaciti pomoću metode dump (). Pogledajte donji primjer da biste znali kako ispustiti SQLite bazu podataka.

uvoz sqlite3 con = sqlite3.povezati ("baza podataka.db ") s otvorenim ('dump.sql ',' w ') kao f: za redak u con.iterdump (): f.napiši ('% s \ n'% redak)

Gornji program izbacit će uzorak baze podataka.db i spremit će izbačene podatke u datoteku koja se zove dump.sql. Možete vidjeti podatke prisutne u direktoriju u kojem su datoteke python trenutne i otvoriti ih pomoću bilo kojeg uređivača teksta.

Executemany () metoda SQLite3

The izvršno mnogo () metoda izvršava SQL naredbu protiv svih sekvenci parametara ili preslikavanja pronađenih u sekvenci seq_of_parameters. Radi jednostavnosti, ova se metoda može koristiti za izvršavanje većine SQL naredbi u jednom retku. E.g., Pomoću ove naredbe možemo umetnuti bilo koji broj redaka kroz python popis. Pogledajte ilustraciju u donjem primjeru.

uvoz sqlite3 conn = sqlite3.povezati ("uzorak.db ") print (" \ n [+] Uspješno povezan s bazom podataka ") cur = conn.cursor () print ("\ n [+] Pokazivač je uspješno postavljen") python_list = [(10000000, 'vivek', ", '10'), (100000001, 'rose',", '21'), (100000002, 'robin', ", '31'), (100000003, 'Dev',", '4'), (100000004, 'michael', ", '52')] cur.executemany ("INSERT INTO student (id, name, images, marks) VALUES (?,?,?,?) ", python_list) print (" \ n [+] Svi podaci su uspješno umetnuti ") cur.close () conn.commit () conn.Zatvoriti()

Gornji program umetnut će sve podatke dane na popisu pythona. Izlaz koji proizvodi program prikazan je u nastavku.

Izbriši zapise iz tablice

Operacijom DELETE možemo koristiti brisanje zapisa iz tablice. Brzo možemo ukloniti red koristeći operaciju DELETE s klauzulom WHERE. Osnovna sintaksa izraza DELETE je:

IZBRIŠI iz ime_tablice GDJE neki_uslov;

Pogledajmo primjer. Iz tablice zaposlenika naše baze podataka izbrisat ćemo redak s id 1001.

uvoz sqlite3 conn = sqlite3.povezati ("uzorak.db ") povez.text_factory = str print ("\ n [+] Uspješno povezan s bazom podataka") cur = conn.cursor () print ("\ n [+] Pokazivač je uspješno postavljen") cur.execute ("DELETE FROM student WHERE id = 1001") print ("\ n [+] Red je uspješno izbrisan") cur.izvršiti ("SELECT * FROM student") podaci = cur.fetchall () za redak u podacima: ispis (red) cur.close () conn.commit () conn.Zatvoriti()

Gornji kod će izbrisati redak s ID-om 1001. Iz povratka naredbe SELECT možete vidjeti da je redak uklonjen. Rezultat programa je kako je prikazano u nastavku.

Ispusti tablicu

Tablicu možemo brzo ispustiti ili izbrisati pomoću SQLite DROP naredbe. Sintaksa izraza DROP prikazana je dolje:

DROP tablica ime_tabele 

Ako tablica ne postoji, tada će SQLite izbaciti pogrešku, pa da bismo to spriječili, možemo koristiti ako postoje oznaka s izrazom DROP. Pogledajte donju sintaksu:

DROP tablica ako postoji ime_tablice

Pogledajmo kako ovu izjavu možemo koristiti s pythonom sqlite3 modul za brisanje tablice. U ovom ćemo programu ukloniti student tablicu koju smo stvorili ranije.

uvoz sqlite3 conn = sqlite3.povezati ("uzorak.db ") povez.text_factory = str print ("\ n [+] Uspješno povezan s bazom podataka") cur = conn.cursor () print ("\ n [+] Pokazivač je uspješno postavljen") cur.izvršiti ("DROP TABLE AKO POSTOJI student") print ("\ n [+] Tablica je uspješno ispuštena") cur.close () conn.commit () conn.Zatvoriti()

Gornji program će izbrisati tablicu student od uzorak baza podataka. Možemo upotrijebiti naredbu tablice popisa koju smo vidjeli ranije da vidimo je li tablica izbrisana. Rezultat programa je kako je prikazano u nastavku.

Iznimke baze podataka SQLite

Neke iznimke baze podataka SQLite mogu se pojaviti zbog neke pogreške. Pogledajmo malo kad su te pogreške nastale.

Ovo je popis svih SQLite izuzetaka; možemo se nositi s tim iznimkama u našim programima koristeći osnovnu Python metodu rukovanja pogreškama / osim pogrešaka.

Zaključak

To nas dovodi do kraja opsežnog vodiča o naprednim metodama rada s SQLiteom pomoću Pythona. Nadam se da ste naučili sve aspekte SQLite3 koristeći Python, koji će nam pomoći u izgradnji fantastičnih Python projekata.

Kako snimiti i struji svoju igraću sesiju na Linuxu
U prošlosti se igranje igara smatralo samo hobijem, ali s vremenom je igračka industrija zabilježila ogroman rast u pogledu tehnologije i broja igrača...
Najbolje igre za ručno praćenje
Oculus Quest nedavno je predstavio sjajnu ideju ručnog praćenja bez kontrolera. Sa sve većim brojem igara i aktivnosti koje izvršavaju podršku bilo fo...
Kako prikazati OSD prekrivač u aplikacijama i igrama na cijelom zaslonu za Linux
Igranje igara preko cijelog zaslona ili upotreba aplikacija u režimu preko cijelog zaslona bez ometanja može vas odsjeći od relevantnih informacija o ...