in deze tutorial zullen we programmatisch werken met de SQLite3 database met Python.
SQLite in het algemeen is een server-less database die u kunt gebruiken in bijna alle programmeertalen, waaronder Python. Server-less betekent dat het niet nodig is om een aparte server te installeren om te werken met SQLite, zodat u direct verbinding kunt maken met de database.
SQLite is een lichtgewicht database die een relationeel database management systeem met nul-configuratie kan bieden omdat er geen behoefte is om iets te configureren of in te stellen om het te gebruiken.,
We zullen SQLite versie 3 of SQLite3 gebruiken, dus laten we beginnen.
inhoudsopgave
verbinding maken
om sqlite3 in Python te gebruiken, moet u eerst de sqlite3-module importeren en vervolgens een verbindingsobject maken dat ons met de database verbindt en ons de SQL-statements laat uitvoeren.
u kunt een verbindingsobject maken met de functie connect ():
import sqlite3con = sqlite3.connect('mydatabase.db')
dat een nieuw bestand zal aanmaken met de naam ‘mydatabase.dB’.,
sqlite3 Cursor
om SQLite-statements in Python uit te voeren, hebt u een cursor-object nodig. U kunt het maken met behulp van de cursor () methode.
De sqlite3-cursor is een methode van het verbindingsobject. Om de sqlite3 statements uit te voeren, moet je eerst een verbinding maken en vervolgens een object van de cursor maken met behulp van het connection object als volgt:
con = sqlite3.connect('mydatabase.db')cursorObj = con.cursor()
nu kunnen we het cursor object gebruiken om de execute() methode aan te roepen om SQL query ‘ s uit te voeren.,
Maak Database
wanneer u een verbinding met SQLite maakt, zal dat automatisch een databasebestand aanmaken als het nog niet bestaat. Dit databasebestand wordt op disk aangemaakt; we kunnen ook een database in RAM aanmaken door gebruik te maken van :memory: met de connect functie. Deze database wordt in-memory database genoemd.
beschouw de onderstaande code waarin we een database hebben aangemaakt met een try, behalve en tenslotte blokken om eventuele uitzonderingen af te handelen:
eerst importeren we de sqlite3 module, dan definiëren we een functie sql_connection., Binnen deze functie hebben we een try block waar de connect() functie een verbindingsobject retourneert nadat de verbinding tot stand is gebracht.
dan hebben we behalve blok, die in het geval van uitzonderingen drukt de foutmelding. Als er geen fouten zijn, wordt de verbinding tot stand gebracht en wordt een bericht als volgt weergegeven.
daarna hebben we onze verbinding in het laatste blok gesloten. Het sluiten van een verbinding is optioneel, maar het is een goede programmeerpraktijk, dus je bevrijdt het geheugen van ongebruikte bronnen.,
tabel aanmaken
om een tabel in SQLite3 te maken, kunt u de tabel aanmaken query gebruiken in de uitvoeren() methode. Overweeg de volgende stappen:
- Maak een verbindingsobject aan.
- maak vanuit het verbindingsobject een cursor-object aan.
- met behulp van het cursor-object, roep de methode uitvoeren met create table query als de parameter.,
laten we werknemers maken met de volgende attributen:
employees (id, name, salary, department, position, hireDate)
de code zal als volgt zijn:
in de bovenstaande code hebben we twee methoden gedefinieerd, de eerste maakt een verbinding en de tweede methode maakt een cursor object om het create table statement uit te voeren.
de methode commit () slaat alle wijzigingen op die we maken. Uiteindelijk worden beide methoden genoemd.
om te controleren of onze tabel is gemaakt, kunt u de DB browser voor SQLite gebruiken om uw tabel te bekijken. Open je mydatabase.,db bestand met het programma, en je zou je tabel moeten zien:
Insert in Table
om gegevens in een tabel in te voegen, gebruiken we de INSERT INTO statement. Overweeg de volgende regel code:
cursorObj.execute("INSERT INTO employees VALUES(1, 'John', 700, 'HR', 'Manager', '2017-01-04')")con.commit()
om te controleren of de gegevens worden ingevoegd, klikt u op Gegevens bladeren in de DB Browser:
We kunnen ook waarden/argumenten doorgeven aan een INSERT statement in de execute() methode. U kunt het vraagteken (?) als plaatshouder voor elke waarde., De syntaxis van de INSERT zal als volgt zijn:
cursorObj.execute('''INSERT INTO employees(id, name, salary, department, position, hireDate) VALUES(?, ?, ?, ?, ?, ?)''', entities)
waar entiteiten de waarden voor de plaatsaanduidingen als volgt bevatten:
entities = (2, 'Andrew', 800, 'IT', 'Tech', '2018-02-06')
de volledige code is als volgt:
Update Table
om de tabel bij te werken, maak je gewoon een verbinding, maak dan een cursor object met behulp van de verbinding en tenslotte gebruik je het update statement in de execute() methode.
stel dat we de naam willen bijwerken van de werknemer wiens id gelijk is aan 2., Voor het updaten gebruiken we de UPDATE-verklaring en voor de werknemer wiens id gelijk is aan 2. We gebruiken de WHERE-clausule als voorwaarde om deze medewerker te selecteren.
beschouw de volgende code:
Dit verandert de naam van Andrew in Rogers als volgt:
SELECT statement
u kunt de SELECT statement gebruiken om gegevens uit een bepaalde tabel te selecteren. Als u alle kolommen van de gegevens uit een tabel wilt selecteren, kunt u de sterretje (*) gebruiken., De syntaxis hiervoor zal als volgt zijn:
select * from table_name
In SQLite3 wordt het Select-commando uitgevoerd in de methode uitvoeren van het cursor-object., Selecteer bijvoorbeeld alle kolommen van de tabel voor werknemers, voer de volgende code uit:
cursorObj.execute('SELECT * FROM employees ')
Als u een paar kolommen uit een tabel wilt selecteren, geef dan de volgende kolommen op:
select column1, column2 from tables_name
bijvoorbeeld
cursorObj.execute('SELECT id, name FROM employees')
het SELECT statement selecteert de vereiste gegevens uit de database tabel, en als u de geselecteerde gegevens wilt ophalen, wordt de methode fetchall() van het cursor object gebruikt. We zullen dit in de volgende sectie demonstreren.,
alle gegevens ophalen
om de gegevens uit een database op te halen, zullen we het SELECT statement uitvoeren en dan zullen we de methode fetchall() van het cursor-object gebruiken om de waarden in een variabele op te slaan. Daarna zullen we de variabele doorlopen en alle waarden afdrukken.
de code zal als volgt zijn:
de bovenstaande code zal de records in onze database als volgt afdrukken:
u kunt de fetchall() ook als volgt in één regel gebruiken:
Als u specifieke gegevens uit de database wilt ophalen, kunt u kan de WHERE-clausule gebruiken., We willen bijvoorbeeld de ID ‘ s en namen ophalen van werknemers met een salaris van meer dan 800. Laten we hiervoor onze tabel vullen met meer rijen en vervolgens onze query uitvoeren.
u kunt de insert-opdracht gebruiken om de gegevens in te vullen, of u kunt ze handmatig invoeren in het DB-browserprogramma.
nu, om id en namen op te halen van degenen met een salaris hoger dan 800:
in het bovenstaande SELECT statement, in plaats van het sterretje ( * ) te gebruiken, hebben we de ID en naam attributen gespecificeerd., Het resultaat zal als volgt zijn:
sqlite3 rowcount
De sqlite3 rowcount wordt gebruikt om het aantal rijen te retourneren dat wordt beïnvloed of geselecteerd door de laatst uitgevoerde SQL query.
wanneer we rowcount gebruiken met het SELECT statement, zal -1 worden geretourneerd omdat het aantal rijen dat geselecteerd is onbekend is totdat ze allemaal opgehaald zijn., Neem het voorbeeld hieronder:
print(cursorObj.execute('SELECT * FROM employees').rowcount)
om het aantal rijen te krijgen, moet u alle gegevens ophalen en vervolgens de lengte van het resultaat krijgen:
rows = cursorObj.fetchall()print len (rows)
wanneer u de DELETE statement gebruikt zonder enige voorwaarde (een WHERE-clausule), dat zal verwijder alle rijen in de tabel en het retourneert het totale aantal verwijderde rijen in RowCount.
print(cursorObj.execute('DELETE FROM employees').rowcount)
als er geen rij wordt verwijderd, geeft deze nul terug.,
List tables
om alle tabellen in een SQLite3-database weer te geven, moet u de sqlite_master-tabel opvragen en vervolgens de fetchall() gebruiken om de resultaten van het SELECT-statement op te halen.
De sqlite_master is de hoofdtabel in SQLite3, die alle tabellen opslaat.
Dit zal alle tabellen als volgt weergeven:
Controleer of een tabel bestaat of niet
bij het maken van een tabel moeten we ervoor zorgen dat de tabel niet al bestaat. Evenzo, bij het verwijderen/ verwijderen van een tabel, de tabel moet bestaan.,s” met de DROP TABLE-instructie als volgt:
drop table if exists table_name
bijvoorbeeld:
cursorObj.execute('drop table if exists projects')
We kunnen ook controleren of de tabel willen we de toegang bestaat dan niet door het uitvoeren van de volgende query:
cursorObj.execute('SELECT name from sqlite_master WHERE type = "table" AND name = "employees"')print(cursorObj.fetchall())
Als de werknemers tabel bestaat, zal terug zijn naam als volgt:
Indien de naam van de tabel geven we niet bestaat, een lege array zal worden geretourneerd:
Drop table
U kunt neerzetten of verwijderen van een tabel met behulp van de DROP-en verliesrekening., De syntaxis van het DROP statement is als volgt:
drop table table_name
om een tabel te laten vallen, moet de tabel in de database aanwezig zijn. Daarom wordt aanbevolen om “if exists” te gebruiken met het drop statement als volgt:
drop table if exists table_name
bijvoorbeeld
sqlite3 exceptions
Exceptions are the runtime errors. In Python programmeren zijn alle uitzonderingen de instanties van de klasse afgeleid van de BaseException.,
In SQLite3 hebben we de volgende Python-uitzonderingen:
DatabaseError
elke fout gerelateerd aan de database verhoogt de DatabaseError.
IntegrityError
IntegrityError is een subklasse van DatabaseError en wordt verhoogd wanneer er een probleem is met de integriteit van gegevens. Buitenlandse gegevens worden bijvoorbeeld niet in alle tabellen bijgewerkt, wat resulteert in de inconsistentie van de gegevens.
ProgrammingError
De uitzondering ProgrammingError raises wanneer er syntaxisfouten of tabel is niet gevonden of functie wordt aangeroepen met het verkeerde aantal parameters/ argumenten.,
OperationalError
deze uitzondering wordt verhoogd wanneer de databasebewerkingen worden mislukt, bijvoorbeeld ongebruikelijke verbondenheid. Dit is niet de schuld van de programmeurs.
NotSupportedError
wanneer u een aantal methoden gebruikt die niet gedefinieerd of ondersteund worden door de database, zal dat de NotSupportedError-uitzondering verhogen.
sqlite3 Executemany (Bulk insert)
u kunt het executemany-statement gebruiken om meerdere rijen tegelijk in te voegen.
beschouw de volgende code:
Hier hebben we een tabel gemaakt met twee kolommen, en “data” heeft vier waarden voor elke kolom., We geven de variabele door aan de executemany() methode samen met de query.
merk op dat we de plaatshouder hebben gebruikt om de waarden door te geven.
bovenstaande code genereert het volgende resultaat:
sluit verbinding
Als u klaar bent met uw database, is het een goede gewoonte om de verbinding te sluiten. U kunt de verbinding sluiten met de methode close ().,
om een verbinding te sluiten, gebruikt u het connection object en roept u de close () methode als volgt aan:
con = sqlite3.connect('mydatabase.db')#program statementscon.close()
sqlite3 datetime
in de Python SQLite3 database kunnen we eenvoudig datum of tijd opslaan door de datatime module te importeren. De volgende formaten zijn de meest voorkomende formaten die u kunt gebruiken voor 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
overweeg de volgende code:
in deze code hebben we eerst de DateTime-module geïmporteerd en hebben we een tabel met de naam toewijzingen gemaakt met drie kolommen.
het gegevenstype van de derde kolom is een datum., Om de datum in de kolom in te voegen, hebben we DateTime gebruikt.datum. Op dezelfde manier kunnen we datetime gebruiken.tijd om met de tijd om te gaan.
bovenstaande code zal de volgende uitvoer genereren:
De grote flexibiliteit en mobiliteit van de SQLite3 database maken het de eerste keuze voor elke ontwikkelaar om het te gebruiken en te verzenden met elk product waarmee hij werkt.
u kunt sqlite3-databases gebruiken in Windows -, Linux -, Mac OS -, Android-en iOS-projecten vanwege hun geweldige draagbaarheid. Dus je verzendt een bestand met je project en dat is het.
Ik hoop dat u de tutorial nuttig vindt., Blijf terugkomen.
Dank u.
Ayesha Tariq is een fan van full stack software engineer, web developer en blockchain developer. Ze heeft uitgebreide kennis van C / C++, Java, Kotlin, Python, en diverse anderen.