Bygg den här appen för att lära dig hur du skapar en databastabell och fyller den med data.
Python har utmärkt databasstöd inbyggt i sitt standardbibliotek, så att du kan skapa och interagera med en databas utan att förlita dig på externa ramverk som Django ORM.
SQLite är lätt och lätt att integrera med Python. Upptäck de grundläggande principerna för databasprogrammering i Python med en enkel användarregistreringsapp.
Hur man skapar en databas i Python
Du kan hitta koden som används för denna handledning i denna GitHub-förråd
För att skapa och interagera med en databas i Python behöver du huvudsakligen två saker: a förbindelse och a markören.
En anslutning hjälper dig att ansluta till en befintlig databas eller skapa en ny. Så här skapar du en databasanslutning i Python med SQLite:
import sqlite3
# Connect to a (new) database
conn = sqlite3.connect('path/to/database.db')
# Close the connection
conn.close()
De ansluta() metod tar in sökvägen till en befintlig databas. Om det inte finns någon databas på den angivna sökvägen kommer den att skapa en. Du bör stänga din databasanslutning när du är klar med att interagera med databasen.
En markör hjälper dig att interagera med den anslutna databasen. Du kommer att använda en markör för att köra SQL-frågor i ditt Python-program. Så här skapar du en markör:
cursor = conn.cursor()
# Close the cursor
cursor.close()
Du kan skapa en markör genom att anropa markör() metod på ett öppet anslutningsobjekt.
Hur man utför en databastransaktion i Python
Med hjälp av en markör kan du köra SQL-satser, frågor eller skript för att läsa eller skriva data eller ändra databasstrukturen.
Det finns tre huvudmetoder du kan använda för att utföra en databastransaktion.
-
Cursor.execute. Denna metod kommer att köra en enda SQL-sats. Så här använder du det:
Denna kod kallar Kör metod på en markör, skickar den en sträng som innehåller en SQL-sats.cursor.execute(
CREATE TABLE IF NOT EXISTS users (
name TEXT,
age INTEGER
)
) -
Cursor.executemany. Den här metoden låter dig köra samma SQL-sats mer än en gång, med olika parametrar varje gång. Det krävs två argument: SQL-satsen och en iterabel. En bra användning för det är att infoga flera objekt i databasen samtidigt:
Ovanstående kod använder avrättningsman metod för att infoga värden i databasen flera gånger.data = [
('Alice', 25),
('Bob', 30),
('Charlie', 22)
]cursor.executemany(INSERT INTO users (name, age) VALUES (?, ?), data)
Notera ? platshållare i SQL-satsen. Metoden executemany kommer att ersätta dessa med motsvarande värden för varje objekt.
-
Cursor.executescript. Som namnet antyder kommer den här metoden att köra ett SQL-skript åt dig. Du kan skriva dina SQL-satser i en annan fil och köra dem med exekvering metod:
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 bakom en registreringsapp går ut på att hämta användarens information med Python och lagra dem i en databas. Dessa steg visar dig 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 app eller ansluta till en befintlig:
import sqlite3
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
# your app's code goes here
cursor.close()
conn.close()
Koden ovan skapar ett anslutningsobjekt och en markör för att interagera med den anslutna databasen.
Steg 2: Skapa en tabell för användare
Du behöver en tabell för att lagra uppgifterna som användarna tillhandahåller när de registrerar sig. Så här skapar 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()
Denna kod kommer att skapa en tabell som heter användare om det inte finns i din databas. Den skapar fyra kolumner i tabellen för att hålla användarinformation. E-postfältet är unikt för att förhindra användare från att skapa flera konton med samma e-post.
Uppmaningen till conn.commit är viktigt att begå frågan i databasen. Utan det blir det inga ändringar i databasen.
Om du använder executescript-metoden kan du lägga till nyckelordet COMMIT i slutet av din SQL-fil, så att du inte behöver anropa conn.commit.
Steg 3: Samla in användardata
Python-funktioner gör det enkelt att återanvända kod, så det är en bra idé att skapa en funktion för att hantera registreringsfunktionen. Denna funktion samlar in användarens förnamn, efternamn, e-postadress och lösenord.
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: ")
Steg 4: Kontrollera lösenordets korrekthet
Ändra register_user funktion 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 uppmana dem att ange lösenordet igen. Du kan uppnå det med en slinga så här:
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 denna ändring kan en användare inte registrera sig om inte deras lösenord matchar.
Steg 5: Kontrollera e-postens unikhet
SQL-satsen som skapar användartabellen definierar e-postfältet som unikt. Detta innebär att databasen kommer att returnera ett felmeddelande om en användare registrerar sig med ett e-postmeddelande som redan finns. För att agera på rätt sätt måste du hantera Python-undantaget:
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.")
Den här koden använder try-except-blocket för att hantera felet som kommer att uppstå från duplicerade e-postmeddelanden. Om databasen skickar ett IntegrityError kommer while-slingan att fortsätta, vilket uppmanar användaren att ange en annan e-postadress.
För denna exempelapp är det säkert att anta att ett IntegrityError endast kommer att uppstå som ett resultat av en dubblett av e-postadressen. I en riktig app kommer du förmodligen att använda mer avancerad felhantering för att ta hand om andra problem som kan uppstå.
Steg 6: Infoga användarens data i databasen
Nu när du har samlat in och verifierat användarens data är det dags att lägga till dem i databasen. Du kan använda en SQL-fråga att göra så. Ändra ditt försök-utom-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("You have successfully created an account.")
break
except sqlite3.IntegrityError:
print("Error: This email is already registered.")
I det modifierade försök-utom-blocket utför markören en SQL-insättningsoperation. Slutligen, den conn.commit -metoden överför SQL-operationen till databasen.
Om du följde alla stegen ovan bör du ha en applikation som registrerar användare och sparar dem i databasen. Du kan använda en app som DB Browser för SQLite för att se innehållet i din databas:
Använda databaser istället för samlingstyper
För enkla databaser kanske du tycker att det är lättare att rulla din egen kod. Men när din applikation växer och din databas blir mer komplex, överväg att använda ett verktyg som Django ORM för att förenkla uppgiften.
För att fortsätta öva dina databaskunskaper på låg nivå, prova att implementera ett inloggningssystem som komplement till registreringsprogrammet.