Bygg din egen registreringsapp med Python og SQLite: Enkel guide!

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 med executescript-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.