Hur man skapar en registreringsapp med Python och en databas

Python erbjuder en utmärkt inbyggd databasfunktionalitet som en del av sitt standardbibliotek, vilket ger dig möjlighet att skapa och interagera med databaser utan behovet av externa ramverk som Django ORM.

SQLite är en lättviktig databas som enkelt kan integreras med Python. Lär dig grunderna i databasprogrammering med Python genom att utveckla en enkel användarregistreringsapplikation.

Hur man skapar en databas i Python

För att skapa och använda en databas i Python, krävs det huvudsakligen två komponenter: en anslutning och en markör.

En anslutning låter dig ansluta till en existerande databas eller skapa en ny. Här är hur du etablerar en databasanslutning med SQLite i Python:

 import sqlite3
conn = sqlite3.connect('path/to/database.db')
conn.close()

Metoden connect() tar sökvägen till en databas som argument. Om ingen databas finns på den angivna platsen, kommer den att skapas. Det är viktigt att stänga din databasanslutning när du inte längre behöver interagera med databasen.

En markör används för att kommunicera med den uppkopplade databasen. Du använder markören för att köra SQL-frågor direkt i ditt Python-program. Här skapar du en markör:

 cursor = conn.cursor()
cursor.close()

Du kan skapa en markör genom att anropa cursor()-metoden på ett öppet anslutningsobjekt.

Hur man utför en databastransaktion i Python

Med en markör kan du köra SQL-kommandon, frågor eller skript för att läsa, skriva data eller ändra databasens struktur.

Det finns tre huvudsakliga metoder som kan användas för att utföra en databastransaktion.

  • Cursor.execute(). Denna metod används för att köra ett enskilt SQL-kommando. Så här använder du den:
     cursor.execute("""
        CREATE TABLE IF NOT EXISTS users (
            name TEXT,
            age INTEGER
        )
    """)
    

    Denna kod anropar execute()-metoden på en markör och skickar en SQL-sats som en sträng.

  • Cursor.executemany(). Denna metod möjliggör att köra samma SQL-kommando upprepade gånger med olika parametrar. Den kräver två argument: SQL-kommandot och en iterabel. En bra användning är att infoga flera rader i databasen samtidigt:
     data = [
        ('Alice', 25),
        ('Bob', 30),
        ('Charlie', 22)
    ]
    cursor.executemany("INSERT INTO users (name, age) VALUES (?, ?)", data)
    

    Koden ovan använder executemany()-metoden för att lägga till flera rader i databasen samtidigt.

    Observera frågetecknen ? som är platshållare i SQL-satsen. executemany()-metoden ersätter dessa med motsvarande värden för varje rad.

  • Cursor.executescript(). Som namnet antyder kör denna metod ett helt SQL-skript. Du kan skriva dina SQL-kommandon i en separat fil och köra dem med hjälp av executescript()-metoden:
     with open("path/to/script.sql") as file:
    sql_script = file.read()
    cursor.executescript(sql_script)
    
  • Hur man bygger en registreringsapp med Python och SQLite3

    Logiken i en registreringsapp går ut på att samla in användarinformation via Python och spara den i en databas. Dessa steg visar hur du skapar ett enkelt registreringssystem med Python och SQLite3.

    Steg 1: Anslut till en befintlig databas eller skapa en ny

    Börja med att skapa en databas för din applikation eller anslut till en befintlig:

     import sqlite3
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
    cursor.close()
    conn.close()
    

    Koden ovan skapar ett anslutningsobjekt och en markör för interaktion med den anslutna databasen.

    Steg 2: Skapa en tabell för användare

    Du behöver en tabell för att lagra de data som användarna anger när de registrerar sig. Här skapar du den med markören:

     cursor.execute("""
        CREATE TABLE IF NOT EXISTS users (
            first_name TEXT,
            last_name TEXT,
            email TEXT UNIQUE,
            password TEXT
        )
    """)
    conn.commit()
    

    Denna kod kommer att skapa en tabell med namnet ”users” om den inte redan existerar i databasen. Den skapar fyra kolumner i tabellen för att lagra användardata. E-postfältet är markerat som unikt för att hindra användare från att skapa flera konton med samma e-postadress.

    Anropet till conn.commit() är nödvändigt för att skicka frågan till databasen. Utan detta anrop kommer inga ändringar att ske i databasen.

    Om du använder executescript()-metoden kan du inkludera nyckelordet COMMIT i slutet av din SQL-fil, så att du inte behöver anropa conn.commit() separat.

    Steg 3: Samla in användardata

    Python-funktioner underlättar återanvändning av kod, därför är det en bra idé att skapa en funktion som hanterar registreringsprocessen. Den här funktionen samlar in användarens förnamn, efternamn, e-postadress och lösenord.

     def register_user():
        first_name = input("Ange ditt förnamn: ")
        last_name = input("Ange ditt efternamn: ")
        email = input("Ange din e-postadress: ")
        password1 = input("Ange ditt lösenord: ")
        password2 = input("Bekräfta ditt lösenord: ")
    

    Steg 4: Kontrollera lösenordets korrekthet

    Ändra register_user-funktionen för att säkerställa att användaren anger samma lösenord två gånger. Om de inte gör det, bör du be dem att ange lösenordet igen. Detta kan uppnås med en slinga som denna:

     def register_user():
        first_name = input("Ange ditt förnamn: ")
        last_name = input("Ange ditt efternamn: ")
        email = input("Ange din e-postadress: ")
        while True:
            password1 = input("Ange ditt lösenord: ")
            password2 = input("Bekräfta ditt lösenord: ")
            if password1 == password2:
                print("Du har registrerat dig framgångsrikt!")
                break
            else:
                print("Dina lösenord måste matcha.")
    

    Med denna ändring kan en användare inte registrera sig om deras lösenord inte matchar varandra.

    Steg 5: Kontrollera e-postens unikhet

    SQL-satsen som skapar användartabellen definierar e-postfältet som unikt. Detta innebär att databasen returnerar ett felmeddelande om en användare försöker registrera sig med en e-postadress som redan finns. För att agera korrekt måste du hantera detta Python-undantag:

     def register_user():
        first_name = input("Ange ditt förnamn: ")
        last_name = input("Ange ditt efternamn: ")
        while True:
            email = input("Ange din e-postadress: ")
            password1 = input("Ange ditt lösenord: ")
            password2 = input("Bekräfta ditt lösenord: ")
            if password1 == password2:
                try:
                    print("Du har skapat ett konto framgångsrikt.")
                    break
                except sqlite3.IntegrityError:
                    print("Fel: Denna e-postadress är redan registrerad.")
            else:
                print("Dina lösenord måste matcha.")
    

    Koden använder ett try-except block för att hantera felet som uppstår från dubbletter av e-postadresser. Om databasen returnerar ett IntegrityError fortsätter while-slingan och uppmanar användaren att ange en annan e-postadress.

    I denna exempelapp är det säkert att anta att ett IntegrityError endast inträffar som en följd av en dubblett av e-postadressen. I en verklig applikation kommer du förmodligen att använda mer avancerad felhantering för att hantera andra problem som kan uppstå.

    Steg 6: Infoga användarens data i databasen

    Nu när du har samlat in och validerat användardata är det dags att lägga till dem i databasen. Du kan göra detta med en SQL-fråga. Modifiera ditt try-except-block så här:

     try:
        cursor.execute("""
            INSERT INTO users (first_name, last_name, email, password)
            VALUES (?, ?, ?, ?)
        """, (first_name, last_name, email, password2))
        conn.commit()
        print("Du har skapat ett konto framgångsrikt.")
        break
    except sqlite3.IntegrityError:
        print("Fel: Denna e-postadress är redan registrerad.")
    

    I det modifierade try-except-blocket utför markören en SQL-insättningsoperation. Slutligen gör conn.commit() att SQL-operationen utförs i databasen.

    Om du har följt alla steg ovan bör du ha en applikation som registrerar användare och sparar dem i databasen. Du kan använda en applikation som DB Browser för SQLite för att granska innehållet i din databas:

    Använda databaser istället för samlingstyper

    För enkla datamängder kan du tycka att det är enklare att hantera din data direkt i Python utan en databas. Men när din applikation växer och datamängden blir mer komplex, överväg att använda ett verktyg som Django ORM för att förenkla hanteringen.

    För att fortsätta att öva dina lågnivå databaskunskaper kan du försöka implementera ett inloggningssystem som komplement till registreringsapplikationen.