
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.
Innehållsförteckning
Hur man skapar en databas i Python
För att skapa och interagera med en databas i Python behöver du huvudsakligen två saker: en anslutning och en markör.
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
conn = sqlite3.connect('path/to/database.db')
conn.close()
Metoden connect() 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()
cursor.close()
Du kan skapa en markör genom att anropa metoden cursor() 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("""
CREATE TABLE IF NOT EXISTS users (
name TEXT,
age INTEGER
)
""")
Denna kod anropar exekveringsmetoden på en markör och skickar den till en sträng som innehåller en SQL-sats.
data = [
('Alice', 25),
('Bob', 30),
('Charlie', 22)
]cursor.executemany("""INSERT INTO users (name, age) VALUES (?, ?)""", data)
Ovanstående kod använder metoden executemany för att infoga värden i databasen flera gånger.
Notera ? platshållare i SQL-satsen. Metoden executemany kommer att ersätta dessa med motsvarande värden för varje objekt.
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 sqlite3conn = sqlite3.connect('database.db')
cursor = conn.cursor()
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 den 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.
Anropet till conn.commit är viktigt för att skicka frågan till 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.
def register_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-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 uppmana dem att ange lösenordet igen. Du kan uppnå det med en slinga så här:
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")
email = input("Enter your email: ")while True:
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
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 korrekt måste du hantera Python-undantaget:
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")while True:
email = input("Enter your email: ")
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
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 för att göra det. Ä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 överför metoden conn.commit 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.