Hvordan Bruke sqlite3 Modul i Python 3

forfatteren valgt COVID-19 Relief Fund å motta en gave som en del av å Skrive for Donasjoner program.

Innledning

SQLite er en selvstendig, fil-basert SQL database. SQLite kommer sammen med Python, og kan brukes i hvilket som helst av dine Python-programmer uten å installere noen ekstra programvare.

I denne opplæringen vil vi gå gjennom sqlite3 modulen i Python 3., Vi vil opprette en forbindelse til en SQLite database, legge til en tabell som database, setter du inn data i tabellen, og lese og endre data i denne tabellen.

For denne opplæringen, vil vi arbeider først og fremst med en beholdning av fisk at vi trenger å endre fisk som er lagt til eller fjernet fra en fiktiv akvarium.

Forutsetninger

for Å få mest mulig ut av denne opplæringen, er det anbefalt å ha noen kjennskap til programmering i Python og noen grunnleggende bakgrunnen med SQL.,

Du kan se gjennom disse tutorials for nødvendig bakgrunnsinformasjon:

  • Hvordan å Kode i Python3
  • En Introduksjon til Søk i MySQL

Trinn 1 — Opprette en Tilkobling til en SQLite Database

Når vi kobler til en SQLite database, har vi tilgang til data som til syvende og sist bor i en fil på datamaskinen vår. SQLite databaser er fullt utstyrt SQL-motorer som kan brukes til mange formål. For nå, vil vi vurdere en database som sporer beholdning av fisk på en fiktiv akvarium.,

Vi kan koble til en SQLite database ved hjelp av Python sqlite3 modul:

import sqlite3connection = sqlite3.connect("aquarium.db")

import sqlite3 gir våre Python-program tilgang til sqlite3 modulen. sqlite3.connect() funksjon returnerer en Connection objekt som vi vil bruke til å samhandle med SQLite database holdt i filen aquarium.db. aquarium.db fil som opprettes automatisk av sqlite3.connect() hvis aquarium.db ikke allerede finnes på datamaskinen vår.,

Vi kan bekrefte at vi opprettet vår connection objekt ved å kjøre:

print(connection.total_changes)

Hvis vi kjører denne Python-kode, vil vi se utgang som:

Output
0

connection.total_changes er det totale antallet database rader som har blitt endret av connection. Siden vi har ikke utført noen SQL-kommandoer ennå, 0 total_changes er riktig.

Hvis, når som helst, vi finner vi ønsker å starte denne opplæringen på nytt, kan vi slett aquarium.db fil fra datamaskinen vår.,

Merk: Det er også mulig å koble til en SQLite database som ligger strengt i minnet (og ikke i en fil) ved å sende spesielle string ":memory:" i sqlite3.connect(). For eksempel, sqlite3.connect(":memory:"). En ":memory:" SQLite database vil forsvinne så snart som Python-programmet avslutter. Dette kan være praktisk hvis du ønsker en midlertidig sandkassen for å prøve noe ut i SQLite, og ikke trenger å vedvare noen data etter at programmet avsluttes.,

Trinn 2 — Legge til Data til SQLite Database

Nå som vi har koblet til aquarium.db SQLite database, kan vi begynne å sette inn og lese data fra den.

I en SQL-database data som er lagret i tabeller. Tabeller definere et sett med kolonner, og inneholder 0 eller flere rader med data for hver av de angitte kolonnene., en tabell som heter fish som følger med følgende data:

navn arter tank_number
Sammy hai 1
Jamie blekksprut 7

fish bordet vil spore en verdi for name, species, og tank_number for hver enkelt fisk i akvariet., Two example fish rows are listed: one row for a shark named Sammy, and one row for a cuttlefish named Jamie.

We can create this fish table in SQLite using the connection we made in Step 1:

cursor = connection.cursor()cursor.execute("CREATE TABLE fish (name TEXT, species TEXT, tank_number INTEGER)")

connection.cursor() returns a Cursor object. Cursor objects allow us to send SQL statements to a SQLite database using cursor.execute()., "CREATE TABLE fish ..." string er en SQL-setning som lager en tabell som heter fish med de tre kolonnene som er beskrevet tidligere: name type TEXT arter av typen TEXT, og tank_number type INTEGER.,

Nå som vi har laget en tabell, kan vi sette inn rader med data inn i det:

cursor.execute("INSERT INTO fish VALUES ('Sammy', 'shark', 1)")cursor.execute("INSERT INTO fish VALUES ('Jamie', 'cuttlefish', 7)")

Vi kaller cursor.execute() to ganger: én gang for å sette inn en rad for hai Sammy i tank 1, og én gang for å sette inn en rad for blekksprut Jamie i tank 7. "INSERT INTO fish VALUES ..." er en SQL-setning som gjør det mulig for oss å legge til rader i en tabell.,

I neste avsnitt, vil vi bruke en SQL SELECT statement å inspisere rekker vi akkurat satt inn i våre fish tabell.

Trinn 3 — Leser Data fra SQLite Database

I Trinn 2, vi har lagt til to rader til en SQLite tabell som heter fish., Vi kan hente disse rader ved hjelp av en SELECT SQL-setning:

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

Hvis vi kjører denne koden, vil vi se utgang som følgende:

Output

cursor.execute() – funksjonen kjører en SELECT erklæringen for å hente ut verdier for name, species, og tank_number kolonner i fish tabell. fetchall() henter alle resultatene av SELECT uttalelse., Når vi print(rows) vi se en liste over to tupler. Hver tuple har tre oppføringer; en oppføring for hver kolonne har vi valgt fra fish tabell. De to tupler har de data vi satt inn i Trinn 2: en tuple for Sammy shark, og en tuple for Jamie cuttlefish.,

Hvis vi ønsket å hente rader i fish tabell som oppfyller et bestemt sett av kriterier, kan vi bruke en WHERE klausulen:

Hvis vi kjører dette, vil vi se utgang som følgende:

Output

Som i forrige eksempel, cursor.execute(<SQL statement>).fetchall() gjør det mulig for oss å hente alle resultatene av en SELECT uttalelse. WHERE klausulen i SELECT uttalelse filtre for rader der verdien av name er target_fish_name., Legg merke til at vi bruker ? for å erstatte vår target_fish_name variabel i SELECT uttalelse. Vi forventer å bare matche en rad, og faktisk vi bare se på rad for Jamie cuttlefish tilbake.

Advarsel: bruk Aldri Python string operasjoner for å dynamisk lage en SQL-setning strengen. Ved hjelp av Python string operasjoner for å sette sammen en SQL-setning string etterlater deg sårbar for SQL-injection angrep. SQL-injection angrep kan brukes til å stjele, endre eller på annen måte endre data som er lagret i databasen., Bruk alltid ? plassholder i din SQL-setninger for å dynamisk erstatning verdier fra Python-program. Passere en tuple av verdier som andre argument til Cursor.execute() for å binde dine verdier i SQL-setningen. Dette substitusjon mønster er vist her og i andre deler av denne opplæringen også.

Trinn 4 — Endre Data i SQLite Database

Rader i en SQLite database kan endres ved hjelp av UPDATE og DELETE SQL-setninger.,

La oss si, for eksempel, at Sammy haien ble flyttet til tank nummer 2. Vi kan endre sammys rad i fish tabell for å reflektere denne endringen:

Vi utstede en UPDATE SQL-setningen for å endre tank_number av Sammy til sin nye verdien av 2. WHERE klausulen i UPDATE uttalelse sikrer at vi bare endre verdien av tank_number hvis en rad har name = "Sammy".,

Hvis vi kjører følgende SELECT uttalelse, kan vi bekrefte vår oppdateringen ble gjort på riktig måte:

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

Hvis vi kjører dette, vil vi se utgang som følgende:

Output

legg Merke til at rad for Sammy nå har verdien av 2 for sin tank_number kolonne.

La oss si at Sammy haien var slippes ut i naturen og ikke lenger holdt av akvariet., Siden Sammy ikke lenger bor på akvariet, det ville være fornuftig å fjerne Sammy rad fra fish tabell.

Problemet en DELETE SQL-setningen for å fjerne en rad:

released_fish_name = "Sammy"cursor.execute( "DELETE FROM fish WHERE name = ?", (released_fish_name,))

Vi utstede en DELETE SQL-setningen for å fjerne raden for Sammy shark. WHERE klausulen i DELETE uttalelse sikrer at vi bare slette en rad hvis raden har name = "Sammy".,

Hvis vi kjører følgende SELECT uttalelse, kan vi bekrefte vår slettingen ble gjort på riktig måte:

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

Hvis vi kjører denne koden, vil vi se utgang som følgende:

Output

legg Merke til at rad for Sammy shark er nå borte, og bare Jamie cuttlefish fortsatt.,

Trinn 5 — Hjelp med regnskapet For Automatisk Opprydding

I denne opplæringen, har vi brukt to ulike objekter for å samhandle med "aquarium.db" SQLite-database: en Connection objekt som heter connection, og en Cursor objekt som heter cursor.

På samme måte som Python-filer som skal være stengt når vi er ferdig å jobbe med dem, Connection og Cursor objekter bør også være lukket når de ikke lenger trengs.,

Vi kan bruke en with erklæringen for å hjelpe oss med å lukke seg automatisk Connection og Cursor objekter:

closing er en praktisk funksjon som tilbys av contextlib modulen. Når en with uttalelsen kommer ut, closing sørger for at close() kalles på det objektet som blir levert til det. closing funksjon er brukt to ganger i dette eksemplet., Én gang for å sikre at Connection objektet returnert av sqlite3.connect() automatisk avsluttet, og en gang til for å sikre at Cursor objektet returnert av connection.cursor() automatisk avsluttet.,

Hvis vi kjører denne koden, vil vi se utgang som følgende:

Output

Siden "SELECT 1" er en SQL-setning som alltid returnerer en enkelt rad med en enkelt kolonne med en verdi på 1, det er fornuftig å se en eneste tuple med 1 som sin eneste verdien som returneres av våre kode.

Konklusjon

sqlite3 modulen er en kraftig del av Python standard bibliotek; den lar oss jobbe med en fullt kjennetegnet på disken SQL-database uten å installere noen ekstra programvare.,

I denne opplæringen, lærte vi hvordan vi skulle bruke den sqlite3 modulen for å koble til en SQLite database, legge til data til databasen, samt lese og endre data i databasen. Langs veien, vi lærte også om risikoen for SQL-injection angrep, og hvordan du kan bruke contextlib.closing for å automatisk ringe close() på Python-objekter i with uttalelser.

her kan vi lære mer om SQL databaser i SQLite vs MySQL vs PostgreSQL: En Sammenligning Av Relational Database Management Systems.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

Hopp til verktøylinje