i den här handledningen kommer vi att arbeta med SQLite3-databasen programmatiskt med Python.
SQLite i allmänhet är en server-mindre databas som du kan använda inom nästan alla programmeringsspråk inklusive Python. Server mindre innebär att det inte finns något behov av att installera en separat server för att arbeta med SQLite så att du kan ansluta direkt till databasen.
SQLite är en lätt databas som kan ge ett relationsdatabashanteringssystem med nollkonfiguration eftersom det inte finns något behov av att konfigurera eller ställa in något för att använda det.,
Vi kommer att använda SQLite version 3 eller SQLite3, så låt oss komma igång.
Innehållsförteckning
Skapa anslutning
För att använda SQLite3 i Python måste du först och främst importera sqlite3-modulen och sedan skapa ett anslutningsobjekt som ansluter oss till databasen och låter oss utföra SQL-satserna.
Du kan ett anslutningsobjekt använda funktionen connect ():
import sqlite3con = sqlite3.connect('mydatabase.db')
som skapar en ny fil med namnet ’mydatabase.dB’.,
SQLite3 markör
För att utföra SQLite uttalanden i Python, behöver du en markör objekt. Du kan skapa den med markörmetoden ().
SQLite3-markören är en metod för anslutningsobjektet. För att utföra SQLite3-satserna bör du först upprätta en anslutning och sedan skapa ett objekt av markören med hjälp av anslutningsobjektet enligt följande:
con = sqlite3.connect('mydatabase.db')cursorObj = con.cursor()
Nu kan vi använda markörobjektet för att anropa exekveringsmetoden() för att utföra några SQL-frågor.,
Skapa databas
När du skapar en anslutning med SQLite skapas en databasfil automatiskt om den inte redan finns. Denna databasfil skapas på disk; vi kan också skapa en databas i RAM med hjälp av: minne: med connect-funktionen. Denna databas kallas in-memory database.
Tänk på koden nedan där vi har skapat en databas med ett försök, förutom och slutligen blockerar för att hantera eventuella undantag:
först importerar vi sqlite3-modulen, då definierar vi en funktion sql_connection., Inuti denna funktion har vi ett försöksblock där connect () – funktionen returnerar ett anslutningsobjekt efter att anslutningen har upprättats.
då har vi utom block, som vid eventuella undantag skriver ut felmeddelandet. Om det inte finns några fel kommer anslutningen att upprättas och visas ett meddelande enligt följande.
efter det har vi stängt vår anslutning i det äntligen blocket. Att stänga en anslutning är valfri, men det är en bra programmeringspraxis, så du frigör minnet från oanvända resurser.,
Skapa tabell
för att skapa en tabell i SQLite3 kan du använda Create Table-frågan i metoden execute (). Tänk på följande steg:
- skapa ett anslutningsobjekt.
- från anslutningsobjektet skapar du ett markörobjekt.
- använd markörobjektet och ring exekveringsmetoden med create table query som parameter.,
låt oss skapa anställda med följande attribut:
employees (id, name, salary, department, position, hireDate)
koden kommer att vara så här:
i ovanstående kod har vi definierat två metoder, den första etablerar en anslutning och den andra metoden skapar ett markörobjekt för att utföra create table-satsen.
commit () – metoden sparar alla ändringar vi gör. I slutändan kallas båda metoderna.
för att kontrollera om vår tabell skapas kan du använda DB-webbläsaren för SQLite för att visa din tabell. Öppna din mydatabas.,db-fil med programmet, och du bör se din tabell:
infoga i tabell
för att infoga data i en tabell använder vi INSERT INTO-satsen. Tänk på följande kodrad:
cursorObj.execute("INSERT INTO employees VALUES(1, 'John', 700, 'HR', 'Manager', '2017-01-04')")con.commit()
för att kontrollera om data infogas, klicka på Bläddra i data i DB-webbläsaren:
Vi kan också skicka värden / argument till ett infoga uttalande i exekveringsmetoden (). Du kan använda frågetecknet (?) som platshållare för varje värde., Syntaxen för insatsen kommer att vara som följande:
cursorObj.execute('''INSERT INTO employees(id, name, salary, department, position, hireDate) VALUES(?, ?, ?, ?, ?, ?)''', entities)
där enheter innehåller värdena för platshållarna enligt följande:
entities = (2, 'Andrew', 800, 'IT', 'Tech', '2018-02-06')
hela koden är som följer:
Uppdateringstabell
för att uppdatera tabell
för att uppdatera tabellen skapar helt enkelt en anslutning, skapar sedan ett markörobjekt med anslutningen och slutligen använder uppdateringssatsen i exekveringsmetoden ().
Antag att vi vill uppdatera namnet på den anställde vars id är lika med 2., För uppdatering kommer vi att använda uppdateringsdeklarationen och för den anställde vars id är lika med 2. Vi kommer att använda WHERE-klausulen som ett villkor för att välja den här arbetstagaren.
Tänk på följande kod:
detta kommer att ändra namnet från Andrew till Rogers enligt följande:
Välj uttalande
Du kan använda select-uttalandet för att välja data från en viss tabell. Om du vill välja alla kolumner i data från en tabell kan du använda asterisken (*)., Syntaxen för detta kommer att vara följande:
select * from table_name
i SQLite3 utförs SELECT-satsen i exekveringsmetoden för markörobjektet., Välj Till exempel alla kolumner i personaltabellen, kör följande kod:
cursorObj.execute('SELECT * FROM employees ')
om du vill välja några kolumner från en tabell, ange sedan kolumnerna som följande:
select column1, column2 from tables_name
till exempel
cursorObj.execute('SELECT id, name FROM employees')
select-satsen väljer de nödvändiga uppgifterna från databastabellen, och om du vill hämta de valda data används metoden hämta() för markörobjektet. Vi kommer att visa detta i nästa avsnitt.,
Hämta Alla data
för att hämta data från en databas, kommer vi att utföra SELECT-satsen och sedan använda fetchall () – metoden för markörobjektet för att lagra värdena i en variabel. Därefter slingrar vi genom variabeln och skriver ut alla värden.
koden kommer att vara så här:
ovanstående kod kommer att skriva ut posterna i vår databas enligt följande:
Du kan också använda fetchall() i en rad enligt följande:
om du vill hämta specifika data från databasen kan du använda WHERE-klausulen., Vi vill till exempel hämta ID och namn på de anställda vars lön är större än 800. För detta, låt oss fylla vårt bord med fler rader och kör sedan vår fråga.
Du kan använda INSERT-satsen för att fylla i data, eller du kan ange dem manuellt i DB-webbläsarprogrammet.
nu, för att hämta id och namn på dem som har en lön större än 800:
i ovanstående välj uttalande, istället för att använda asterisken ( * ), angav vi ID-och namnattributen., Resultatet kommer att vara som följande:
SQLite3 rowcount
SQLite3 rowcount används för att returnera antalet rader som påverkas eller väljs av den senaste utförda SQL-frågan.
När vi använder rowcount med SELECT-satsen returneras -1 som hur många rader som väljs är okänt tills de hämtas., Tänk på exemplet nedan:
print(cursorObj.execute('SELECT * FROM employees').rowcount)
För att få antalet rader måste du hämta Alla data och sedan få längden på resultatet:
rows = cursorObj.fetchall()print len (rows)
När du använder delete-uttalandet utan något villkor (en where-klausul), som tar bort alla rader i tabellen, och det kommer att returnera det totala antalet raderade rader i rowcount.
print(cursorObj.execute('DELETE FROM employees').rowcount)
om ingen rad tas bort kommer den att returnera noll.,
listtabeller
för att lista alla tabeller i en SQLite3-databas bör du fråga sqlite_master-tabellen och sedan använda fetchall() för att hämta resultaten från select-satsen.
sqlite_master är huvudtabellen i SQLite3, som lagrar alla tabeller.
det här listar alla tabeller enligt följande:
kontrollera om en tabell finns eller inte
När du skapar en tabell bör vi se till att tabellen inte redan finns. På samma sätt bör tabellen finnas när du tar bort/ tar bort en tabell.,
drop table if exists table_name
till exempel
cursorObj.execute('drop table if exists projects')
Vi kan också kontrollera om tabellen vi vill komma åt finns eller inte genom att utföra följande fråga:
cursorObj.execute('SELECT name from sqlite_master WHERE type = "table" AND name = "employees"')print(cursorObj.fetchall())
om tabellen Anställda finns kommer den att returnera sitt namn enligt följande:
om tabellnamnet vi angav inte finns kommer en tom matris att returneras:
DROP TABLE
Du kan släppa/ta bort en tabell med hjälp av drop-satsen., Syntaxen för DROP-satsen är som följer:
drop table table_name
om du vill släppa en tabell ska tabellen finnas i databasen. Det rekommenderas därför att använda ”if exists” med drop-satsen enligt följande:
drop table if exists table_name
till exempel
SQLite3 undantag
undantag är körtidsfel. I Python-programmering är alla undantag instanserna för klassen härledd från BaseException.,
i SQLite3 har vi följande huvudsakliga Python undantag:
DatabaseError
eventuella fel relaterade till databasen höjer Databasenfel.
IntegrityError
IntegrityError är en underklass av Databaserror och tas upp när det finns ett dataintegritetsproblem. Utländska data uppdateras till exempel inte i alla tabeller vilket resulterar i inkonsekvens av data.
ProgrammingError
undantag ProgrammingError höjer när det finns syntaxfel eller tabell inte hittas eller funktion anropas med fel antal parametrar / argument.,
OperationalError
detta undantag höjs när databasoperationerna misslyckades, till exempel ovanlig frånkoppling. Detta är inte programmerarens fel.
NotSupportedError
När du använder vissa metoder som inte definieras eller stöds av databasen, som kommer att höja undantaget NotSupportedError.
SQLite3 Executemany (Bulk insert)
Du kan använda executemany-satsen för att infoga flera rader samtidigt.
Tänk på följande kod:
här skapade vi en tabell med två kolumner, och ”data” har fyra värden för varje kolumn., Vi skickar variabeln till executemany () – metoden tillsammans med frågan.
Observera att vi har använt platshållaren för att passera värdena.
ovanstående kod kommer att generera följande resultat:
Stäng anslutning
När du är klar med din databas är det en bra praxis att stänga anslutningen. Du kan stänga anslutningen med metoden close ().,
för att stänga en anslutning, använd anslutningsobjektet och ring metoden stäng() enligt följande:
con = sqlite3.connect('mydatabase.db')#program statementscon.close()
SQLite3 datetime
i Python SQLite3-databasen kan vi enkelt lagra datum eller tid genom att importera datatidsmodulen. Följande format är de vanligaste formaten du kan använda för datetime:
YYYY-MM-DDYYYY-MM-DD HH:MMYYYY-MM-DD HH:MM:SSYYYY-MM-DD HH:MM:SS.SSSHH:MMHH:MM:SSHH:MM:SS.SSSnow
Tänk på följande kod:
i den här koden importerade vi datetime-modulen först och vi har skapat en tabell som heter tilldelningar med tre kolumner.
datatypen för den tredje kolumnen är ett datum., För att infoga datumet i kolumnen har vi använt datetime.datum. På samma sätt kan vi använda datetime.dags att hantera tiden.
ovanstående kod kommer att generera följande utdata:
den stora flexibiliteten och rörligheten i SQLite3-databasen gör det till det första valet för alla utvecklare att använda den och skicka den med vilken produkt han arbetar med.
Du kan använda SQLite3-databaser i Windows, Linux, Mac OS, Android och iOS-projekt på grund av deras fantastiska bärbarhet. Så du skickar en fil med ditt projekt och det är det.
Jag hoppas att du hittar handledningen användbar., Kom tillbaka.
Tack.
Ayesha Tariq är en full stack software engineer, webbutvecklare och blockchain developer enthusiast. Hon har omfattande kunskap om C / C++, Java, Kotlin, Python och olika andra.