Programmeerimine

SQLite andmebaasi haldamine Pythonis

SQLite andmebaasi haldamine Pythonis

SQLite on SQL-i keelel põhinev relatsiooniline andmebaaside haldussüsteem; see on serverivaba, nullkonfiguratsiooniga andmebaasimootor. See on üks populaarsemaid andmebaasimootoreid ja seda on väga lihtne kasutada väikestes rakendustes. See loob kogu andmebaasi salvestamiseks ainult ühe kettafaili, mis muudab faili kaasaskantavaks. Seda kasutatakse Android OS-is andmete salvestamise peamise allikana. Google Chrome kasutab seda ka saidiandmete ja kasutajaandmete, sealhulgas paroolide salvestamiseks kohalikku masinasse.

Advanced töötamine Pythonis SQLite andmebaasiga

Selles õpetuses käsitletakse järgmisi teemasid: piltide sisestamine SQLite tabelisse, andmebaasis olevate tabelite loendamine, kogu muudatuste tuvastamine andmebaasi ühendamisest alates, andmebaasi varundamine, SQLite andmebaasi tühistamine, SQLite'i tagasivõtmine, kustutamine kirjed tabelist, tabeli kukutamine ja SQLite andmebaasi erandid.

Samuti võiksite vaadata selle õpetuse esimest osa, mis esitleb SQLite'i põhitõed, selle kasutamise eelised, ühendamine andmebaasifailiga, tabeli loomine andmebaasis, andmete sisestamine tabelisse, päringute esitamine tabelist, tabeli värskendamine ja palju muud.

Failid ja pildid SQLite andmebaasis

Andmebaasidega töötades on olukordi, kus peate pildid või failid andmebaasi sisestama või sellest eksportima. Näiteks kui loote andmebaasi töötajate andmete salvestamiseks, peate võib-olla ka sisestama andmebaasi iga töötaja pildid.

Piltide lisamiseks SQLite'i andmebaasi peame kasutama SQLite BLOB-andmetüüpi. Andmetüüpi BLOB () kasutatakse suurte objektide, tavaliselt suurte failide, näiteks piltide, muusika, videote, dokumentide, PDF-i jms salvestamiseks. Esimene samm on andmete ja piltide teisendamine Pythoni baitobjektiks, mis sarnaneb SQLite BLOB-i andmetüübiga. Enne jätkamist looge tabel nimega õpilane andmebaasis väljadega id, nimi, pildid, märgid. Tabeli loomiseks käivitage järgmine kood.

impordi sqlite3 conn = sqlite3.ühenda ("proov.db ") print (" \ n [+] Andmebaasiga edukalt ühendatud ") cur = conn.kursor () print ("\ n [+] Kursor on edukalt seadistatud") table = cur.execute ("" "CREATE TABLE õpilane (id INT PRIMARY KEY, nimi TEXT, images BLOB, märgib TEXT);" "") print ("\ n [+] Tabel on edukalt loodud") cur.sulge () ühend.toime panema () ühendama.Sulge()

See programm loob uue nimega tabeli õpilane. Terminalis näete järgmist väljundit.

Pildi sisestamine

Kujutise sisestamiseks SQLite'i andmebaasi teisendage pilt pythoni baidiobjektis ja sisestage see seejärel veergu Pildid, mis võtab vastu BLOB-andmeid. Pildi lisamiseks käivitage järgmine kood img.png andmebaasis Pythoni abil.

impordi sqlite3 conn = sqlite3.ühenda ("proov.db ") ühend.text_factory = str print ("\ n [+] Ühendamine andmebaasiga õnnestus") cur = conn.kursor () print ("\ n [+] Kursor on edukalt seadistatud") avatud ("img.png "," rb ") failina: andmed = fail.read () python_tuple = (101, "robin", data, "90") print ("\ n [+] Pilt on edukalt imporditud") print ("\ n [+] Nüüd sisestatakse andmebaasi") cur.execute ("INSERT INTO õpilane (ID, nimi, pildid, märgid) VALUES (?,?,?,?) ", python_tuple) print (" \ n [+] Andmed on edukalt sisestatud ") cur.sulge () ühend.toime panema () ühendama.Sulge()

See programm sisestab pildi teie loodud õpilaste andmebaasi. Näete järgmist väljundit.

Ülaltoodud programmis oleme faili avanud binaarrežiimis ning lugenud iga bait ja salvestanud selle muutujaks andmed. Seejärel kasutame seda muutujat INSERT-lauses pildi andmebaasi sisestamiseks.

Pildi toomine

Kujutise andmebaasist toomiseks tõmmake rida select-lauset kasutades ja seejärel pääsege pildi binaarandmetele Pythoni muutujaks, mis salvestatakse pildifaili. Vaadake illustreerimiseks järgmist koodi.

impordi sqlite3 conn = sqlite3.ühenda ("proov.db ") ühend.text_factory = str print ("\ n [+] Ühendamine andmebaasiga õnnestus") cur = conn.kursor () print ("\ n [+] Kursor on edukalt seadistatud") print ("\ n [+] Pildi toomine") cur.execute ("SELECT * FROM õpilane") ret = cur.fetchall () i jaoks ret: data = i [2] avatud ("img2.png "," wb ") failina: fail.kirjuta (andmed) print ("\ n [+] Pilt on salvestatud") cur.sulge () ühend.toime panema () ühendama.Sulge()

See lihtne programm otsib pildi andmebaasist ja salvestab selle kettale nimega img2.png. Pildifailile saate valida ka teise nime. Programmi väljund on näidatud allpool.

Loetlege kõik andmebaasi tabelid

Andmebaasis saame luua arvukalt tabeleid. Seega on vaja loetleda ka kõik andmebaasis olevad tabelid. Andmebaasis olevate tabelite loetlemiseks pärige tabelit sqlite_master SQL-i käsu SELECT abil. Päringu süntaks on järgmine:

Valige nimi FROM sqlite_master WHERE type = "table"

Nii kasutame seda päringut kõigi meie andmebaasis olevate tabelite loetlemiseks.

impordi sqlite3 conn = sqlite3.ühenda ("proov.db ") print (" \ n [+] Andmebaasiga edukalt ühendatud ") cur = conn.kursor () print ("\ n [+] Kursor on edukalt seadistatud") cur.execute ("SELECT nimi saidilt sqlite_master kus type =" table "") read = cur.fetchall () print (read) cur.sulge () ühend.toime panema () ühendama.Sulge()

Ülaltoodud kood loetleb kõik meie andmebaasis olevad tabelid. Koodi poolt käivitamisel saadav väljund on järgmine. Sõltuvalt andmebaasis loodud tabelitest võite näha mõnda muud väljundit.

Andmebaasiga ühendamisest alates tehtud muudatuste tuvastamine

Igal juhul on kasulik tuvastada ridade arv, mida on muudetud, sisestatud või kustutatud alates andmebaasi ühendamisest. Selleks kasutage kokku_muudatused () ühenduse objekti meetod, mis tagastab kogu andmebaasi ridade arvu, mida ühendus on mõjutanud. Vaatame näidisdemot, et teada saada, kuidas see töötab.

impordi sqlite3 conn = sqlite3.ühenda ("proov.db ") ühend.text_factory = str print ("\ n [+] Mõlema andmebaasiga edukalt ühendatud") cur = conn.kursor () print ("\ n [+] Mõlemad kursorid on edukalt seadistatud") cur.execute ("INSERT INTO student (id, nimi, pildid, märgid) VALUES (140, 'David',", 99) ") cur.execute ("INSERT INTO õpilane (id, nimi, pildid, märgid) VALUES (150, 'Sam',", 97) ") muudatused = conn.total_changes print ("\ n [+] Ridade muudatuste koguarv on nüüd:", muudatused) ühend.toime panema () cur.sulge () ühend.Sulge()

Ülaltoodud programm prindib praeguse ühenduse muudatuste arvu. Näete järgmist väljundit.

Tagasivõtmine SQLite'is

Mõne ülesande tagasivõtmise puhul võite kasutada funktsiooni rollback (). Seda meetodit saab kasutada pärast viimast pühendamist tehtud ülesande tagasivõtmiseks. Vaadake illustreerimiseks allpool toodud näidet.

impordi sqlite3 conn = sqlite3.ühenda ("proov.db ") ühend.text_factory = str print ("\ n [+] Mõlema andmebaasiga edukalt ühendatud") cur = conn.kursor () print ("\ n [+] Mõlemad kursorid on edukalt seadistatud") cur.execute ("INSERT INTO student (id, nimi, pildid, märgid) VALUES (100001, 'David',", 99) ") cur.execute ("INSERT INTO õpilane (ID, nimi, pildid, märgid) VALUES (100002, 'Sam',", 97) ") ühendus.toime () print ("\ n [+] Kaks rida on edukalt sisestatud") cur.execute ("SELECT * FROM õpilane") esimene = cur.fetchall () print ("\ n [+] Uued kirjed andmebaasis on:") i jaoks esimesena: print (i) cur.execute ("INSERT INTO student (id, nimi, pildid, märgid) VALUES (10003, 'Kishan',", 100) ") cur.execute ("INSERT INTO student (id, nimi, pildid, märgid) VALUES (10004, 'Ankit',", 100) ") print (" \ n [+] Kaks rida on edukalt sisestatud, kuid pole määratud ") conn.rollback () print ("\ n [+] Oleme eelmised käsud tagasi kerinud, nii et uusi andmeid ei sisestata") conn.toime panema () cur.execute ("SELECT * FROM õpilane") teine ​​= cur.fetchall () print ("\ n [+] Uued kirjed andmebaasis on:") sekundi i jaoks: print (i) cur.sulge () ühend.Sulge()

Ülaltoodud näites sisestavad kaks esimest sisestuslauset andmed nii, nagu on antud, kuid kaks viimast sisestamislauset on tagasipöörduvad, nii et nad ei lisa tabelisse andmeid. Väljund on selline, nagu allpool näidatud.

Andmebaasi varundamine

Andmebaasiga töötamise ajal on oluline teha andmebaasist varukoopia. Moodul sqlite3 pakub funktsiooni andmebaasi varundamiseks. Ühenduse objekti backup () meetodi abil saame teha SQLite andmebaasi varukoopia. Varundamismeetodi põhisüntaks on:

varukoopia (sihtmärk, *, lehed = 0, edenemine = pole, nimi = "peamine", uni = 0.250)

Vaikimisi või millal lehekülgi on kas 0 või negatiivne täisarv, kogu andmebaas kopeeritakse ühe sammuna, mis on eelistatud väikese andmebaasi jaoks; vastasel juhul kopeerib meetod kuni silmuse lehekülgi ajal, mida saaks teha ulatusliku andmebaasiga. The nimi argument näitab kopeeritava andmebaasi nime: see peab olema string, mis sisaldab kas vaikimisi peamise andmebaasi tähistamiseks või ajutise andmebaasi tähistamiseks. The magama argument määrab unerežiimi aja sekundites ülejäänud lehtede varundamiskatsete vahel. See võib olla kas täisarv või ujukoma väärtus.

Võtame varukoopia andmebaasi.db andmebaas, mida oleme õpetuses kasutanud.

impordi sqlite3 conn_main = sqlite3.ühenda ("proov.db ") conn_backup = sqlite3.connect ("näidis_varukoopia.db ") print (" \ n [+] Mõlema andmebaasiga edukalt ühendatud ") cur_main = conn_main.kursor () cur_backup = conn_backup.kursor () print ("\ n [+] Mõlemad kursorid on edukalt seadistatud") conn_main.varundamine (conn_backup, pages = 0, progress = puudub, name = "main") print ("Andmebaasi varundamine õnnestus edukalt") cur_main.sulgege () cur_backup.sulge () conn_main.toime () conn_backup.toime panema () conn_main.sulgege () conn_backup.Sulge()

Ülaltoodud koodis on kaks andmebaasi ühendatud, millest üks on andmebaas, millest me tahame varukoopia teha, ja teine ​​on andmebaas, kuhu me varukoopia võtame. Kasuta varukoopia () esimese andmebaasiühenduse objekti varukoopia tegemise meetod. See funktsioon aktsepteerib teise andmebaasi ühenduse objekti objekti varunduse loomiseks teise andmebaasi. Kasuta lehed = 0 argumenti, nii et protsess toimub ühes etapis, mis on soovitatav väikeste andmebaaside jaoks. See programm loob uue andmebaasi nime valimi_varukoopia.db ja täitke see esimese andmebaasi varukoopiaga. Võib-olla näete, et praegusesse kausta on loodud uus andmebaas, mille failisuurus on eelmine.

SQLite andmebaasi ladestamine

Andmebaaside ladestamine on oluline ülesanne. Tavaliselt on dump-fail andmete SQL-lausete kogum, mida tavaliselt kasutatakse varundamiseks. Andmebaasi saab ladestada dump () meetodi abil. Vaadake allolevat näidet, et teada saada, kuidas SQLite andmebaasi visata.

impordi sqlite3 con = sqlite3.ühenda ("andmebaas.db ") avatud ('dump.sql ',' w ') kui f: sirge jaoks kon.iterdump (): f.kirjuta ('% s \ n'% rida)

Ülaltoodud programm loob andmebaasi valimi.db ja see salvestab tühjendatud andmed faili nimega dump.ruutmeetrit. Näete kataloogis leiduvaid andmeid, kus Pythoni failid on aktuaalsed, ja saate need avada mis tahes tekstiredaktori abil.

SQLite3 meetoditrememany ()

The täitevmeel () meetod täidab SQL-i käsu kõigi järjestuses leitud parameetrite järjestuste või vastenduste vastu seq_of_parameters. Lihtsuse huvides saab seda meetodit kasutada suurema osa SQL-käskude täitmiseks ühel real. E.g., Selle käsu abil saame sisestada mis tahes arvu rida pythoni loendit. Vaadake allpool toodud näidet.

impordi sqlite3 conn = sqlite3.ühenda ("proov.db ") print (" \ n [+] Andmebaasiga edukalt ühendatud ") cur = conn.kursor () print ("\ n [+] Kursor on edukalt seadistatud") python_list = [(10000000, 'vivek', ", '10'), (100000001, 'rose',", '21'), (100000002, 'robin', ',' 31 '), (100000003,' Dev ',', '4'), (100000004, 'michael', ',' 52 ')] cur.täitjamees ("INSERT INTO student (id, name, images, marks) VALUES (?,?,?,?) ", python_list) print (" \ n [+] Kõik andmed on edukalt sisestatud ") cur.sulge () ühend.toime panema () ühendama.Sulge()

Ülaltoodud programm sisestab kõik Pythoni loendis toodud andmed. Programmi väljunditoodang on näidatud allpool.

Kustutage tabelist kirjed

Kirjeid tabelist kustutamiseks saame kasutada operatsiooni DELETE. Rida saab kiiresti kustutades kustutada klahvi WHERE. Lause DELETE põhisüntaks on:

KUSTUTA tabeli_nimi alt WHERE mõned_tingimus;

Vaatame näite. Kustutame oma andmebaasi töötajate tabelist rea ID 1001.

impordi sqlite3 conn = sqlite3.ühenda ("proov.db ") ühend.text_factory = str print ("\ n [+] Ühendamine andmebaasiga õnnestus") cur = conn.kursor () print ("\ n [+] Kursor on edukalt seadistatud") cur.execute ("DELETE FROM student WHERE id = 1001") print ("\ n [+] Rida on edukalt kustutatud") cur.execute ("SELECT * FROM õpilane") andmed = cur.andmete rida fetchall (): print (rida) cur.sulge () ühend.toime panema () ühendama.Sulge()

Ülaltoodud kood kustutab rea ID-ga 1001. SELECT-lause tagastusest näete, et rida on eemaldatud. Programmi väljund on selline, nagu allpool näidatud.

Lange tabel

SQLite DROP-i lause abil saame tabeli kiiresti maha visata või kustutada. DROP-lause süntaks on järgmine:

DROP tabeli tabeli_nimi 

Kui tabelit pole olemas, viskab SQLite vea, nii et selle vältimiseks saame kasutada kui on olemas silt DROP-i lausega. Vaadake järgmist süntaksit:

DROP tabel, kui on olemas tabeli_nimi

Vaatame, kuidas saame seda lauset pythoniga kasutada sqlite3 moodul tabeli kustutamiseks. Selles programmis eemaldame õpilane oleme varem loonud.

impordi sqlite3 conn = sqlite3.ühenda ("proov.db ") ühend.text_factory = str print ("\ n [+] Ühendamine andmebaasiga õnnestus") cur = conn.kursor () print ("\ n [+] Kursor on edukalt seadistatud") cur.execute ("DROP TABLE IF EXISTS student") print ("\ n [+] Tabel on edukalt kukutatud").sulge () ühend.toime panema () ühendama.Sulge()

Ülaltoodud programm kustutab tabeli õpilane alates proov andmebaasi. Saame kasutada loenditabeli käsku, mida oleme varem näinud, et näha, kas tabel on kustutatud. Programmi väljund on selline, nagu allpool näidatud.

SQLite andmebaasi erandid

Mõni SQLite andmebaasi erand võib mõne vea tõttu tõusta. Vaatame natuke, millal need vead tõstatati.

See on kõigi SQLite'i erandite loend; saame nende eranditega oma programmides hakkama, kasutades Pythoni põhilist proovimis- / veatöötlusmeetodit.

Järeldus

See viib meid põhjaliku juhendi SQLite'iga töötamise täiustatud meetodite kohta Pythoni abil. Loodan, et õppisite Pythoni abil ära kõik SQLite3 aspektid, mis aitab meil luua fantastilisi Pythoni projekte.

Kuidas kuvada OSD ülekatet täisekraanil Linuxi rakendustes ja mängudes
Täisekraaniga mängude mängimine või rakenduste kasutamine häireteta täisekraanirežiimis võib teid paneelil või tegumiribal kuvatavast asjakohasest süs...
Viis parimat mängu püüdmise kaarti
Me kõik oleme YouTube'is voogesituse mänge näinud ja armastanud. PewDiePie, Jakesepticye ja Markiplier on vaid mõned tipptasemel mängijatest, kes on t...
Kuidas mängu Linuxis arendada
Kümme aastat tagasi ei osanud paljud Linuxi kasutajad ennustada, et nende lemmikoperatsioonisüsteem on ühel päeval populaarne kommertsvideomängude män...