Programmering

Behärska SQLite-databasen i Python

Behärska SQLite-databasen i Python

SQLite är ett relationsdatabashanteringssystem baserat på SQL-språket; Det är en serverlös databasmotor med nollkonfiguration. Det är en av de mest populära databasmotorerna och mycket lätt att använda i små applikationer. Det skapar bara en diskfil för att lagra hela databasen, vilket gör filen bärbar. Den används i Android OS som den primära källan för att lagra data. Det används också av Google Chrome för att lagra webbplatsdata och användardata, inklusive lösenord i den lokala maskinen.

Avancerat arbete med SQLite Database i Python

I denna handledning är ämnena som kommer att behandlas: infoga bilder i en SQLite-tabell, Lista tabellerna som finns i en databas, Identifiera totala förändringar sedan databasen är ansluten, Säkerhetskopiera en databas, Dumpa en SQLite-databas, Återställ i SQLite registrerar från en tabell, släpper en tabell och SQLite-databasundantag.

Du kanske också vill se den första delen av denna handledning, som presenterar grunderna i SQLite, fördelarna med att använda den, ansluta till en databasfil, skapa en tabell i databasen, infoga data i tabellen, fråga data från tabellen, uppdatera tabellen och många fler.

Filer och bilder i SQLite-databasen

När du arbetar med databaser finns det situationer där du behöver infoga bilder eller filer i en databas eller exportera från den. Till exempel, om du skapar en databas för att lagra medarbetardata kan du också behöva infoga bilder av varje anställd i databasen.

För att lägga till bilder i en SQLite-databas måste vi använda BLOB-datatypen SQLite. BLOB () -datatypen används för att lagra stora objekt, vanligtvis stora filer som bilder, musik, videor, dokument, PDF, etc. Det första steget är att konvertera data och bilder till byteobjektet i Python, vilket liknar BLOB-datatypen SQLite. Innan du fortsätter skapar du en tabell med namnet studerande i databasen med fälten id, namn, bilder, märken. Kör följande kod för att skapa tabellen.

importera sqlite3 conn = sqlite3.anslut ("prov.db ") print (" \ n [+] Uppkopplad till databasen ") cur = conn.markör () utskrift ("\ n [+] Markören har konfigurerats framgångsrikt") table = cur.execute ("" "CREATE TABLE student (id INT PRIMARY KEY, name TEXT, images BLOB, marks TEXT);" "") print ("\ n [+] Tabellen har skapats framgångsrikt") cur.stäng () anslut.begå () ansluta.stänga()

Detta program skapar en ny tabell med namnet studerande. Du ser följande utdata i terminalen.

Infoga en bild

För att infoga en bild i en SQLite-databas, förvandla bilden till ett pythonbyteobjekt och sätt sedan in den i bildkolumnen, som accepterar BLOB-data. Kör följande kod för att lägga till en bild img.png i databasen med Python.

importera sqlite3 conn = sqlite3.anslut ("prov.db ") anslutning.text_factory = str print ("\ n [+] Uppkopplad till databasen") cur = conn.markör () utskrift ("\ n [+] Markören har konfigurerats framgångsrikt") med öppen ("bild.png "," rb ") som fil: data = fil.läs () python_tuple = (101, "robin", data, "90") print ("\ n [+] Bilden har importerats framgångsrikt") print ("\ n [+] Infogar nu i databasen") cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (?,?,?,?) ", python_tuple) print (" \ n [+] Data har infogats framgångsrikt ") cur.stäng () anslut.begå () ansluta.stänga()

Detta program infogar bilden i studentdatabasen som du skapade. Följande utdata visas.

I ovanstående program har vi öppnat filen i binärt läge och läst varje byte och lagrat den i variabel data. Sedan använder vi den variabeln i INSERT-uttalandet för att infoga bilden i databasen.

Hämtar en bild

För att hämta en bild från en databas, hämta raden med hjälp av en select-sats och få åtkomst till bildens binära data till en pythonvariabel, som kommer att lagras i en bildfil. Se följande kod för illustration.

importera sqlite3 conn = sqlite3.anslut ("prov.db ") anslutning.text_factory = str print ("\ n [+] Uppkopplad till databasen") cur = conn.markör () utskrift ("\ n [+] Markören har ställts in") utskrift ("\ n [+] Hämtar bilden") cur.execute ("SELECT * FROM student") ret = cur.fetchall () för i i ret: data = i [2] med öppen ("img2.png "," wb ") som fil: fil.skriv (data) utskrift ("\ n [+] Bilden har sparats") cur.stäng () anslut.begå () ansluta.stänga()

Detta enkla program hämtar bilden från databasen och sparar den på disken som heter img2.png. Du kan också välja ett annat namn för bildfilen. Programmets resultat visas nedan.

Lista alla tabeller i en databas

I en databas kan vi skapa ett stort antal tabeller. Så det finns också ett behov av att lista alla tabeller som finns i en databas. För att lista tabellerna i en databas, fråga sqlite_master-tabellen med SELECT-satsen för SQL. Frågan har syntax:

VÄLJ namn FRÅN sqlite_master VAR typ = "tabell"

Så här använder vi denna fråga för att lista alla tabeller som finns i vår databas.

importera sqlite3 conn = sqlite3.anslut ("prov.db ") print (" \ n [+] Uppkopplad till databasen ") cur = conn.markör () utskrift ("\ n [+] Markören har konfigurerats framgångsrikt") cur.exekvera ("VÄLJ namn från sqlite_master där typ =" tabell "") rader = cur.fetchall () print (rader) cur.stäng () anslut.begå () ansluta.stänga()

Ovanstående kod visar alla tabeller som finns i vår databas. Utgången som produceras av koden när den körs är som följer. Du kan se någon annan utdata beroende på tabellerna du har skapat i databasen.

Identifiera totalt antal ändringar sedan anslutning till databasen

I alla situationer är det användbart att identifiera antalet rader som har ändrats, infogats eller raderats sedan databasen har anslutits. För det, använd totalt_ändringar () metod för anslutningsobjektet, som returnerar det totala antalet databaserader som har påverkats sedan anslutningen. Låt oss se ett exempel på en demo för att veta hur det fungerar.

importera sqlite3 conn = sqlite3.anslut ("prov.db ") anslutning.text_factory = str print ("\ n [+] Har anslutits till både databasen") cur = conn.markör () utskrift ("\ n [+] Båda markören har ställts in") 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) ") changes = conn.total_changes print ("\ n [+] Totalt nu för radändringar är:", ändringar) anslutning.begå () cur.stäng () anslut.stänga()

Ovanstående program skriver ut antalet rader som ändras i den aktuella anslutningen. Följande utdata visas.

Återställning i SQLite

När det gäller att ångra vissa uppgifter kan du använda funktionen för återställning (). Denna metod kan användas för att ångra uppgiften som har gjorts efter det senaste åtagandet. Se nedanstående exempel för en illustration.

importera sqlite3 conn = sqlite3.anslut ("prov.db ") anslutning.text_factory = str print ("\ n [+] Har anslutits till både databasen") cur = conn.markör () utskrift ("\ n [+] Båda markören har konfigurerats framgångsrikt") 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) ") anslut.commit () print ("\ n [+] Två raden har infogats framgångsrikt") cur.execute ("SELECT * FROM student") först = cur.fetchall () print ("\ n [+] De nya posterna i databasen är:") för i i första: 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 [+] De två raderna har infogats framgångsrikt men inte engagerat ") anslut.rollback () utskrift ("\ n [+] Vi har tillbaka de tidigare kommandona så att de nya uppgifterna inte kommer att införas").begå () cur.execute ("SELECT * FROM student") sekund = cur.fetchall () print ("\ n [+] De nya posterna i databasen är:") för i i andra: print (i) cur.stäng () anslut.stänga()

I exemplet ovan kommer de två första infogningsuttalandena att infoga informationen som angiven, men de sista två infoga uttalandena kommer att återställas så att de inte lägger till några data i tabellen. Utgången kommer att visas som visas nedan.

Säkerhetskopiera en databas

När du arbetar med databasen är det viktigt att ta en säkerhetskopia av databasen. Sqlite3-modulen ger en funktion för att ta backup av databasen. Med hjälp av backup () -metoden för anslutningsobjektet kan vi säkerhetskopiera SQLite-databasen. Den grundläggande syntaxen för säkerhetskopieringsmetoden är:

säkerhetskopia (mål, *, sidor = 0, framsteg = ingen, namn = "huvud", viloläge = 0.250)

Som standard, eller när sidor är antingen 0 eller ett negativt heltal kopieras hela databasen i ett enda steg, vilket är att föredra för en liten databas; i annat fall utför metoden en loopkopiering upp till sidor vid en tidpunkt som kan göras med den omfattande databasen. De namn argumentet visar databasnamnet som kommer att kopieras: det måste vara en sträng som innehåller antingen standard, för att ange huvuddatabasen eller för att ange den tillfälliga databasen. De sova argument anger tiden i sekunder för att sova mellan försök att säkerhetskopiera de återstående sidorna. Det kan vara antingen som ett heltal eller som ett flytande värde.

Låt oss ta en säkerhetskopia av databas.db databas som vi har använt i handledningen.

importera sqlite3 conn_main = sqlite3.anslut ("prov.db ") conn_backup = sqlite3.anslut ("sample_backup.db ") utskrift (" \ n [+] Framgångsrikt ansluten till både databasen ") cur_main = conn_main.markör () cur_backup = conn_backup.cursor () print ("\ n [+] Båda markören har konfigurerats framgångsrikt") conn_main.backup (conn_backup, pages = 0, progress = None, name = "main") print ("Databasen har säkerhetskopierats framgångsrikt") cur_main.stäng () cur_backup.stäng () conn_main.begå () conn_backup.begå () conn_main.stäng () conn_backup.stänga()

I koden ovan är de två databaserna anslutna, den ena är den databas som vi vill säkerhetskopiera, och den andra är databasen där vi tar säkerhetskopian. Använd säkerhetskopiering() metod för det första databasanslutningsobjektet för att göra en säkerhetskopia. Denna funktion accepterar anslutningsobjektet för den andra databasen som mål för att skapa en säkerhetskopia på den andra databasen. Använd sidor = 0 argument, så processen kommer att ske i ett steg, vilket rekommenderas för små databaser. Detta program skapar ett nytt exempel på databasnamn_säkerhetskopiering.db och fyll den med säkerhetskopian av den första databasen. Du kanske ser att en ny databas har skapats i den aktuella mappen med samma filstorlek som den föregående.

Dumpa en SQLite-databas

Dumpning av databaser är en viktig uppgift. Vanligtvis är en dumpfil en uppsättning SQL-satser för data, som vanligtvis används för säkerhetskopiering. Vi kan dumpa en databas med dump () -metoden. Se exemplet nedan för att veta hur man släpper en SQLite-databas.

importera sqlite3 con = sqlite3.anslut ("databas.db ") med öppen ('dump.sql ',' w ') som f: för rad i kon.iterdump (): f.skriv ('% s \ n'% rad)

Ovanstående program kommer att dumpa databasprovet.db, och det kommer att spara den dumpade informationen i en fil som heter dump.kvm. Du kan se data som finns i katalogen där pythonfilerna är aktuella och öppna den med valfri textredigerare.

executemany () metod för SQLite3

De många () metoden kör ett SQL-kommando mot alla parametersekvenser eller mappningar som finns i sekvensen seq_of_parameters. För enkelhetens skull kan den här metoden användas för att utföra de flesta SQL-kommandon på en rad. E.g., Vi kan infoga valfritt antal rader genom en pythonlista med det här kommandot. Se exemplet nedan för illustrationen.

importera sqlite3 conn = sqlite3.anslut ("prov.db ") print (" \ n [+] Uppkopplad till databasen ") cur = conn.markör () utskrift ("\ n [+] Markören har konfigurerats framgångsrikt") 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) VÄRDEN (?,?,?,?) ", python_list) print (" \ n [+] All data har infogats framgångsrikt ") cur.stäng () anslut.begå () ansluta.stänga()

Ovanstående program infogar alla data som ges i pythonlistan. Produktionen som produceras av programmet visas nedan.

Ta bort poster från en tabell

Vi kan använda DELETE-operationen för att ta bort poster från en tabell. Vi kan snabbt ta bort en rad med DELETE-operationen med WHERE-satsen. Den grundläggande syntaxen för DELETE-uttalandet är:

RADERA från tabellnamn VAR vissa_villkor;

Låt oss se ett exempel. Vi raderar raden med id 1001 från anställdstabellen i vår databas.

importera sqlite3 conn = sqlite3.anslut ("prov.db ") anslutning.text_factory = str print ("\ n [+] Uppkopplad till databasen") cur = conn.markör () utskrift ("\ n [+] Markören har ställts in") cur.execute ("DELETE FROM student WHERE id = 1001") print ("\ n [+] Raden har raderats framgångsrikt") cur.exekvera ("SELECT * FROM student") data = cur.fetchall () för rad i data: skriv ut (rad) cur.stäng () anslut.begå () ansluta.stänga()

Ovanstående kod tar bort raden med ID 1001. Du kan se från återkomsten av SELECT-uttalandet att raden har tagits bort. Programmets resultat är som visas nedan.

Släpp ett bord

Vi kan snabbt släppa eller ta bort en tabell med hjälp av SQLite DROP-uttalandet. Syntaxen för DROP-uttalandet är som visas nedan:

DROP tabell tabellnamn 

Om tabellen inte finns kommer SQLite att kasta ett fel, så för att förhindra detta kan vi använda om det finns tagg med DROP-uttalandet. Se syntaxen nedan:

DROP-tabell om det finns tabellnamn

Låt oss se hur vi kan använda detta uttalande med python sqlite3 modul för att radera en tabell. I det här programmet tar vi bort studerande tabell som vi har skapat tidigare.

importera sqlite3 conn = sqlite3.anslut ("prov.db ") anslutning.text_factory = str print ("\ n [+] Uppkopplad till databasen") cur = conn.markör () utskrift ("\ n [+] Markören har ställts in") cur.execute ("DROP TABLE IF EXISTS student") print ("\ n [+] Tabellen har släppts framgångsrikt") cur.stäng () anslut.begå () ansluta.stänga()

Ovanstående program tar bort tabellen studerande från prov databas. Vi kan använda kommandot listtabell som vi har sett tidigare för att se om tabellen raderas. Programmets resultat är som visas nedan.

Undantag för SQLite-databas

Vissa SQLite-databasundantag kan höjas på grund av något fel. Låt oss se lite när dessa fel uppstod.

Detta är listan över alla SQLite-undantag; vi kan hantera dessa undantag i våra program med hjälp av grundläggande försök / utom felhanteringsmetod för Python.

Slutsats

Det tar oss till slutet av den omfattande guiden om avancerade metoder för att arbeta med SQLite med Python. Jag hoppas att du lärde dig alla aspekter av SQLite3 med Python, vilket hjälper oss att bygga fantastiska Python-projekt.

Mus Lägg till musgester i Windows 10 med dessa gratisverktyg
Lägg till musgester i Windows 10 med dessa gratisverktyg
Under senare år har datorer och operativsystem utvecklats kraftigt. Det fanns en tid då användare var tvungna att använda kommandon för att navigera g...
Mus Kontrollera och hantera musrörelser mellan flera skärmar i Windows 10
Kontrollera och hantera musrörelser mellan flera skärmar i Windows 10
Dual Display Mouse Manager låter dig kontrollera och konfigurera musrörelser mellan flera skärmar genom att sakta ner dess rörelser nära gränsen. Wind...
Mus WinMouse låter dig anpassa och förbättra muspekarens rörelse på Windows PC
WinMouse låter dig anpassa och förbättra muspekarens rörelse på Windows PC
Om du vill förbättra standardfunktionerna för din muspekare, använd freeware WinMouse. Det lägger till fler funktioner som hjälper dig att få ut det m...