Python pruža izvanrednu podršku za rad sa bazama podataka direktno u svojoj standardnoj biblioteci. To znači da možete kreirati bazu podataka i komunicirati sa njom bez potrebe za spoljnim okvirima kao što je Django ORM.
SQLite je lagan i jednostavno se integriše sa Python-om. Kroz izradu jednostavne aplikacije za registraciju korisnika, otkrijte osnovne principe programiranja baza podataka u Python-u.
Kako kreirati bazu podataka u Python-u
Za kreiranje baze podataka i interakciju sa njom u Python-u, potrebna su vam dva osnovna elementa: konekcija i kursor.
Konekcija vam omogućava da se povežete sa postojećom bazom podataka ili da kreirate novu. Sledi primer kako kreirati konekciju sa bazom podataka u Python-u koristeći SQLite:
import sqlite3
conn = sqlite3.connect('path/to/database.db')
conn.close()
Metoda `connect()` prihvata putanju do postojeće baze podataka. Ukoliko baza podataka ne postoji na datoj putanji, ona će biti kreirana. Obavezno zatvorite konekciju sa bazom podataka nakon što završite sa njenim korišćenjem.
Kursor vam pomaže u interakciji sa uspostavljenom konekcijom sa bazom podataka. Kursor ćete koristiti za izvršavanje SQL upita unutar vašeg Python programa. Evo kako da kreirate kursor:
cursor = conn.cursor()
cursor.close()
Kursor se kreira pozivanjem metode `cursor()` na otvorenom objektu konekcije.
Kako izvršiti transakciju baze podataka u Python-u
Koristeći kursor, možete pokretati SQL izjave, upite ili skripte za čitanje ili upis podataka, ili za modifikaciju strukture baze podataka.
Postoje tri glavne metode koje možete koristiti za izvršavanje transakcija nad bazom podataka.
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
name TEXT,
age INTEGER
)
""")
Ovaj kod poziva metodu `execute` na kursoru, prosleđujući joj string koji sadrži SQL naredbu.
data = [
('Alice', 25),
('Bob', 30),
('Charlie', 22)
]cursor.executemany("""INSERT INTO users (name, age) VALUES (?, ?)""", data)
Gornji kod koristi metodu `executemany` za višestruko umetanje vrednosti u bazu podataka.
Obratite pažnju na `?` čuvare mesta u SQL naredbi. Metoda `executemany` će ih zameniti odgovarajućim vrednostima za svaki objekat.
with open("path/to/script.sql") as file:
sql_script = file.read()cursor.executescript(sql_script)
Kako napraviti aplikaciju za registraciju sa Python-om i SQLite3
Logika aplikacije za registraciju uključuje prikupljanje informacija o korisniku pomoću Python-a i njihovo čuvanje u bazi podataka. Sledi prikaz kako kreirati jednostavan sistem registracije sa Python-om i SQLite3.
Korak 1: Povezivanje sa postojećom ili kreiranje nove baze podataka
Započnite kreiranjem baze podataka za vašu aplikaciju ili povezivanjem sa postojećom:
import sqlite3conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.close()
conn.close()
Gornji kod kreira objekat konekcije i kursor za interakciju sa povezanom bazom podataka.
Korak 2: Kreiranje tabele za korisnike
Potrebna vam je tabela za čuvanje podataka koje korisnici unose prilikom registracije. Evo kako da je kreirate pomoću kursora:
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
first_name TEXT,
last_name TEXT,
email TEXT UNIQUE,
password TEXT
)
""")conn.commit()
Ovaj kod kreira tabelu nazvanu `users` ako ona ne postoji u vašoj bazi podataka. On definiše četiri kolone u tabeli za čuvanje informacija o korisnicima. Polje `email` je jedinstveno kako bi se sprečilo da korisnici kreiraju više naloga sa istom adresom e-pošte.
Poziv `conn.commit()` je veoma važan za upisivanje upita u bazu podataka. Bez toga, neće biti nikakvih promena u bazi podataka.
Ako koristite metodu `executescript`, možete dodati ključnu reč `COMMIT` na kraj vaše SQL datoteke, tako da ne morate pozivati `conn.commit()`.
Korak 3: Prikupljanje korisničkih podataka
Python funkcije olakšavaju ponovnu upotrebu koda, stoga je dobra praksa napraviti funkciju koja će upravljati procesom registracije. Ova funkcija će prikupiti ime, prezime, e-mail i lozinku korisnika.
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: ")
Korak 4: Provera ispravnosti lozinke
Izmenite funkciju `register_user` da osigurate da korisnik dva puta unese istu lozinku. Ukoliko to ne učini, treba ga tražiti da ponovo unese lozinku. To možete postići pomoću petlje kao što je ova:
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")
Sa ovom izmenom, korisnik se ne može registrovati osim ako se njegove lozinke ne poklapaju.
Korak 5: Provera jedinstvenosti e-pošte
SQL izjava koja kreira tabelu korisnika definiše polje e-pošte kao jedinstveno. To znači da će baza podataka vratiti grešku ako se korisnik registruje sa e-poštom koja već postoji. Da biste reagovali na odgovarajući način, morate obraditi Python izuzetak:
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.")
Ovaj kod koristi blok `try-except` za rukovanje greškom koja će se pojaviti zbog duplirane adrese e-pošte. Ukoliko baza podataka izbaci grešku `IntegrityError`, `while` petlja će se nastaviti, tražeći od korisnika da unese drugu adresu e-pošte.
Za ovaj primer aplikacije, sigurno je pretpostaviti da će se greška `IntegrityError` pojaviti samo kao rezultat duple adrese e-pošte. U pravoj aplikaciji, verovatno ćete koristiti naprednije rukovanje greškama kako biste rešili druge potencijalne probleme.
Korak 6: Umetanje korisničkih podataka u bazu podataka
Sada kada ste prikupili i verifikovali podatke korisnika, vreme je da ih dodate u bazu podataka. Za to možete koristiti SQL upit. Izmenite vaš `try-except` blok ovako:
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.")
U izmenjenom `try-except` bloku, kursor izvršava SQL operaciju umetanja. Na kraju, metoda `conn.commit()` upisuje SQL operaciju u bazu podataka.
Ako ste pratili sve gore navedene korake, trebalo bi da imate aplikaciju koja registruje korisnike i čuva ih u bazi podataka. Možete koristiti aplikaciju kao što je DB Browser for SQLite da biste videli sadržaj vaše baze podataka:
Korišćenje baza podataka umesto tipova kolekcije
Za jednostavne baze podataka, možda će vam biti lakše da pokrenete sopstveni kod. Međutim, kako vaša aplikacija raste i vaša baza podataka postaje kompleksnija, razmislite o korišćenju alata kao što je Django ORM da biste pojednostavili zadatak.
Da biste nastavili da vežbate svoje veštine baza podataka niskog nivoa, pokušajte da implementirate sistem za prijavljivanje koji će dopuniti program za registraciju.