Како направити апликацију за регистрацију са Питхон-ом и базом података

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`. Ova metoda izvršava jednu SQL naredbu. Evo kako se ona koristi:
     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.

  • `cursor.executemany`. Ova metoda omogućava da izvršite istu SQL naredbu više puta, sa različitim parametrima svaki put. Potrebna su dva argumenta: SQL izjava i iterabilni objekat. Dobra upotreba ove metode je ubacivanje više objekata u bazu podataka odjednom:
     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.

  • `cursor.executescript`. Kao što samo ime kaže, ova metoda izvršava SQL skriptu. Možete napisati svoje SQL izjave u zasebnu datoteku i izvršiti ih pomoću metode `executescript`:
     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 sqlite3

    conn = 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.