Python er utstyrt med innebygd støtte for databaser direkte i standardbiblioteket. Dette tillater deg å interagere med databaser og skape nye, uten å være avhengig av eksterne rammeverk som Django ORM.
SQLite er en lettvektig løsning som enkelt integreres med Python. Utforsk de fundamentale prinsippene for databaseprogrammering i Python ved hjelp av en enkel applikasjon for brukerregistrering.
Opprettelse av database i Python
For å samhandle med en database i Python, behøver du to nøkkelelementer: en tilkobling og en markør.
En tilkobling gir deg muligheten til å koble deg til en eksisterende database, eller skape en ny. Her er hvordan du etablerer en databasetilkobling med SQLite i Python:
import sqlite3
conn = sqlite3.connect('sti/til/database.db')
conn.close()
Metoden connect()
krever stien til en eksisterende database. Hvis ingen database finnes i den angitte stien, vil en ny bli opprettet. Det er viktig å lukke databasetilkoblingen når du er ferdig med å jobbe med databasen.
En markør er det som brukes for å kommunisere med den tilkoblede databasen. Med en markør kan du utføre SQL-spørringer i Python-programmet ditt. Slik oppretter du en markør:
cursor = conn.cursor()
cursor.close()
Du kan generere en markør ved å kalle metoden cursor()
på et åpent tilkoblingsobjekt.
Utførelse av databasetransaksjoner i Python
Med en markør kan du utføre SQL-setninger, spørringer eller skript for å lese og skrive data, samt endre databasens struktur.
Det finnes tre hovedmetoder for å utføre en databasetransaksjon:
-
Cursor.execute
. Denne metoden utfører en enkelt SQL-setning. Slik bruker du den:cursor.execute(""" CREATE TABLE IF NOT EXISTS brukere ( navn TEXT, alder INTEGER ) """)
Denne koden kaller
execute
-metoden på en markør og gir den en streng som inneholder en SQL-setning. -
Cursor.executemany
. Denne metoden gir deg muligheten til å utføre den samme SQL-setningen flere ganger, men med ulike parametre hver gang. Den krever to argumenter: SQL-setningen og en itererbar samling. Et typisk bruksområde er å legge inn flere objekter i databasen samtidig:data = [ ('Alice', 25), ('Bob', 30), ('Charlie', 22) ]
cursor.executemany("""INSERT INTO brukere (navn, alder) VALUES (?, ?)""", data)
Koden over benytter
executemany
-metoden for å sette inn verdier i databasen flere ganger.Merk deg
?
-plassholderne i SQL-setningen.execute
-metoden vil erstatte disse med de tilsvarende verdiene for hvert objekt. -
Cursor.executescript
. Som navnet indikerer, vil denne metoden kjøre et helt SQL-skript. Du kan skrive dine SQL-setninger i en separat fil og utføre dem medexecutescript
-metoden:with open("sti/til/skript.sql") as file: sql_script = file.read()
cursor.executescript(sql_script)
Utvikling av en registreringsapp med Python og SQLite3
Logikken bak en registreringsapp innebærer å hente inn brukerinformasjon med Python og lagre den i en database. Disse trinnene viser deg hvordan du lager et enkelt registreringssystem med Python og SQLite3.
Trinn 1: Koble til en eksisterende database eller lag en ny
Start med å skape en database for appen din, eller koble til en eksisterende:
import sqlite3
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.close()
conn.close()
Koden ovenfor oppretter et tilkoblingsobjekt og en markør for å jobbe med den tilkoblede databasen.
Trinn 2: Opprett en tabell for brukere
Du trenger en tabell for å lagre dataene som brukerne gir ved registrering. Slik oppretter du en med markøren:
cursor.execute(""" CREATE TABLE IF NOT EXISTS brukere ( fornavn TEXT, etternavn TEXT, email TEXT UNIQUE, passord TEXT ) """)
conn.commit()
Denne koden vil lage en tabell som heter brukere
hvis den ikke eksisterer i databasen din. Den genererer fire kolonner i tabellen for å lagre brukerinformasjon. Feltet for e-post er definert som unikt for å hindre brukere fra å skape flere kontoer med samme e-post.
Kallet til conn.commit
er essensielt for å sende spørringen til databasen. Uten det vil ingen endringer skje i databasen.
Dersom du bruker executescript
-metoden, kan du legge til nøkkelordet COMMIT
på slutten av din SQL-fil, slik at du slipper å kalle conn.commit
.
Trinn 3: Samle inn brukerdata
Python-funksjoner gjør det lett å gjenbruke kode, så det er en god idé å lage en funksjon for å håndtere registreringsprosessen. Denne funksjonen samler inn brukerens fornavn, etternavn, e-post og passord.
def register_user(): fornavn = input("Skriv inn fornavnet ditt: ") etternavn = input("Skriv inn etternavnet ditt: ") email = input("Skriv inn e-posten din: ") passord1 = input("Skriv inn passordet ditt: ") passord2 = input("Bekreft passordet ditt: ")
Trinn 4: Sjekk passordets korrekthet
Modifiser register_user
-funksjonen for å sikre at brukeren skriver inn samme passord to ganger. Om de ikke gjør det, burde du be dem om å skrive inn passordet på nytt. Dette kan du oppnå med en løkke som dette:
def register_user(): fornavn = input("Skriv inn fornavnet ditt: ") etternavn = input("Skriv inn etternavnet ditt: ") email = input("Skriv inn e-posten din: ") while True: passord1 = input("Skriv inn passordet ditt: ") passord2 = input("Bekreft passordet ditt: ") if passord1 == passord2: print("Du har registrert deg!") break else: print("Passordene dine må stemme overens")
Med denne endringen vil ikke brukeren kunne registrere seg før passordene deres stemmer overens.
Trinn 5: Sjekk e-postens unikhet
SQL-setningen som skaper brukertabellen definerer e-postfeltet som unikt. Dette betyr at databasen vil returnere en feilmelding dersom en bruker forsøker å registrere seg med en e-post som allerede eksisterer. For å håndtere dette på korrekt måte, må du fange opp dette Python-unntaket:
def register_user(): fornavn = input("Skriv inn fornavnet ditt: ") etternavn = input("Skriv inn etternavnet ditt: ") while True: email = input("Skriv inn e-posten din: ") passord1 = input("Skriv inn passordet ditt: ") passord2 = input("Bekreft passordet ditt: ") if passord1 == passord2: try: print("Du har opprettet en konto.") break except sqlite3.IntegrityError: print("Feil: Denne e-posten er allerede registrert.") else: print("Passordene dine må stemme overens.")
Denne koden bruker en try-except
-blokk for å håndtere feilen som kan oppstå fra duplikat e-poster. Hvis databasen kaster en IntegrityError
, vil while
-løkken fortsette, og brukeren vil bli bedt om å angi en annen e-postadresse.
I dette eksempelet kan vi anta at en IntegrityError
kun vil oppstå som følge av en duplikat e-postadresse. I en faktisk applikasjon ville du sannsynligvis brukt mer avansert feilhåndtering for å dekke andre potensielle problemer som kan oppstå.
Trinn 6: Sett inn brukerdata i databasen
Nå som du har samlet inn og bekreftet brukerdataene, er det på tide å legge dem til i databasen. Du kan bruke en SQL-spørring for å utføre dette. Modifiser try-except
-blokken som følger:
try: cursor.execute(""" INSERT INTO brukere (fornavn, etternavn, email, passord) VALUES (?, ?, ?, ?) """, (fornavn, etternavn, email, passord2)) conn.commit() print("Du har opprettet en konto.") break except sqlite3.IntegrityError: print("Feil: Denne e-posten er allerede registrert.")
I den modifiserte try-except
-blokken utfører markøren en SQL-innsettingsoperasjon. Til slutt fullfører conn.commit
-metoden SQL-operasjonen i databasen.
Hvis du har fulgt alle trinnene ovenfor, burde du nå ha en applikasjon som kan registrere brukere og lagre dem i databasen. Du kan bruke et verktøy som DB Browser for SQLite for å inspisere innholdet i databasen din:
Bruk av databaser i stedet for samlingstyper
For enkle databehov kan det være enklere å skrive din egen kode. Men etter hvert som applikasjonen din vokser og databasen blir mer kompleks, bør du vurdere å ta i bruk et verktøy som Django ORM for å forenkle prosessen.
For å fortsette å øve på dine grunnleggende databaseferdigheter, kan du prøve å implementere et innloggingssystem for å komplimentere registreringsprogrammet.