Bygg denne appen for å lære om hvordan du oppretter en databasetabell og fyller den med data.
Python har utmerket databasestøtte innebygd i standardbiblioteket, slik at du kan opprette og samhandle med en database uten å stole på eksterne rammer som Django ORM.
SQLite er lett og lett å integrere med Python. Oppdag de grunnleggende prinsippene for databaseprogrammering i Python med en enkel brukerregistreringsapp.
Hvordan lage en database i Python
Du kan finne koden som brukes for denne opplæringen i denne GitHub-depot
For å opprette og samhandle med en database i Python trenger du to hovedting: a forbindelse og a markøren.
En tilkobling hjelper deg med å koble til en eksisterende database eller opprette en ny. Slik oppretter du en databasetilkobling i Python med SQLite:
import sqlite3
# Connect to a (new) database
conn = sqlite3.connect('path/to/database.db')
# Close the connection
conn.close()
De koble() metoden tar inn banen til en eksisterende database. Hvis det ikke er noen database på den angitte banen, vil den opprette en. Du bør lukke databasetilkoblingen når du er ferdig med å samhandle med databasen.
En markør hjelper deg å samhandle med den tilkoblede databasen. Du vil bruke en markør til å utføre SQL-spørringer i ditt Python-program. Slik lager du en markør:
cursor = conn.cursor()
# Close the cursor
cursor.close()
Du kan lage en markør ved å ringe markør() metode på et åpent tilkoblingsobjekt.
Hvordan utføre en databasetransaksjon i Python
Ved å bruke en markør kan du kjøre SQL-setninger, spørringer eller skript for å lese eller skrive data, eller endre databasestrukturen.
Det er tre hovedmetoder du kan bruke for å utføre en databasetransaksjon.
-
Cursor.execute. Denne metoden vil kjøre en enkelt SQL-setning. Slik bruker du det:
Denne koden kaller henrette metode på en markør, og sender den en streng som inneholder en SQL-setning.cursor.execute(
CREATE TABLE IF NOT EXISTS users (
name TEXT,
age INTEGER
)
) -
Cursor.executemany. Denne metoden lar deg kjøre den samme SQL-setningen mer enn én gang, med forskjellige parametere hver gang. Det krever to argumenter: SQL-setningen og en iterabel. En god bruk for det er å sette inn flere objekter i databasen samtidig:
Koden ovenfor bruker henrettelsesmann metode for å sette inn verdier i databasen flere ganger.data = [
('Alice', 25),
('Bob', 30),
('Charlie', 22)
]cursor.executemany(INSERT INTO users (name, age) VALUES (?, ?), data)
Legg merke til ? plassholdere i SQL-setningen. Eksekveringsmetoden vil erstatte disse med tilsvarende verdier for hvert objekt.
-
Cursor.executescript. Som navnet antyder, vil denne metoden utføre et SQL-skript for deg. Du kan skrive SQL-setningene dine i en annen fil og kjøre dem med executescript metode:
with open("path/to/script.sql") as file:
sql_script = file.read()cursor.executescript(sql_script)
Hvordan bygge en registreringsapp med Python og SQLite3
Logikken bak en registreringsapp innebærer å hente brukerens informasjon med Python og lagre dem 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 opprett en ny
Start med å opprette en database for appen din eller koble til en eksisterende:
import sqlite3
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
# your app's code goes here
cursor.close()
conn.close()
Koden ovenfor oppretter et tilkoblingsobjekt og en markør for å samhandle med den tilkoblede databasen.
Trinn 2: Lag en tabell for brukere
Du trenger en tabell for å lagre dataene brukerne oppgir ved registrering. Slik lager du en med markøren:
cursor.execute(
CREATE TABLE IF NOT EXISTS users (
first_name TEXT,
last_name TEXT,
email TEXT UNIQUE,
password TEXT
)
)
conn.commit()
Denne koden vil lage en tabell kalt brukere hvis den ikke finnes i databasen din. Den oppretter fire kolonner i tabellen for å inneholde brukerinformasjon. E-postfeltet er unikt for å hindre brukere i å opprette flere kontoer med samme e-post.
Oppfordringen til conn.commit er viktig å sende spørringen inn i databasen. Uten det blir det ingen endringer i databasen.
Hvis du bruker executescript-metoden, kan du legge til nøkkelordet COMMIT på slutten av SQL-filen din, slik at du ikke trenger å ringe conn.commit.
Trinn 3: Samle inn brukerdata
Python-funksjoner gjør det enkelt å gjenbruke kode, så det er en god idé å lage en funksjon for å håndtere registreringsfunksjonen. Denne funksjonen samler inn brukerens fornavn, etternavn, e-post og passord.
defregister_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")
email = input("Enter your email: ")
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
Trinn 4: Kontroller passordets korrekthet
Endre register_user funksjon for å sikre at brukeren oppgir det samme passordet to ganger. Hvis de ikke gjør det, bør du be dem om å skrive inn passordet på nytt. Du kan oppnå det med en løkke som dette:
defregister_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")
email = input("Enter your email: ")whileTrue:
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
# Check password correctness
if password1 == password2:
print("You have successfully registered!")
break
else:
print("Your passwords must match")
Med denne endringen kan en bruker ikke registrere seg med mindre passordene deres samsvarer.
Trinn 5: Sjekk e-postens unikehet
SQL-setningen som oppretter brukertabellen definerer e-postfeltet som unikt. Dette betyr at databasen vil returnere en feil hvis en bruker registrerer seg med en e-post som allerede eksisterer. For å handle riktig, må du håndtere Python-unntaket:
defregister_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")whileTrue:
email = input("Enter your email: ")
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
# Check password correctness
if password1 == password2:
try:
print("You have successfully created an account.")
break
except sqlite3.IntegrityError:
print("Error: This email is already registered.")
else:
print("Your passwords must match.")
Denne koden bruker try-except-blokken for å håndtere feilen som vil oppstå fra dupliserte e-poster. Hvis databasen kaster en IntegrityError, vil while-løkken fortsette, og brukeren blir bedt om å angi en annen e-postadresse.
For denne eksempelappen er det trygt å anta at en IntegrityError bare vil oppstå som et resultat av en duplikat e-postadresse. I en ekte app vil du sannsynligvis bruke mer avansert feilhåndtering for å imøtekomme andre problemer som kan oppstå.
Trinn 6: Sett inn brukerens data i databasen
Nå som du har samlet inn og verifisert brukerens data, er det på tide å legge dem til i databasen. Du kan bruke en SQL-spørring å gjøre slik. Endre prøve-unntatt blokken slik:
try:
cursor.execute(
INSERT INTO users (first_name, last_name, email, password)
VALUES (?,?,?, ?)
, (first_name, last_name, email, password2))
conn.commit()
print("You have successfully created an account.")
break
except sqlite3.IntegrityError:
print("Error: This email is already registered.")
I den modifiserte try-except-blokken utfører markøren en SQL-innsettingsoperasjon. Til slutt, den conn.commit metoden forplikter SQL-operasjonen til databasen.
Hvis du fulgte alle trinnene ovenfor, bør du ha en applikasjon som registrerer brukere og lagrer dem i databasen. Du kan bruke en app som DB-nettleser for SQLite for å se innholdet i databasen din:
Bruke databaser i stedet for samlingstyper
For enkle databaser kan det være lettere å rulle din egen kode. Men etter hvert som applikasjonen din vokser og databasen blir mer kompleks, bør du vurdere å bruke et verktøy som Django ORM for å forenkle oppgaven.
For å fortsette å øve på databaseferdighetene dine på lavt nivå, prøv å implementere et påloggingssystem for å komplettere registreringsprogrammet.