Contents

Jak stworzyć aplikację do rejestracji za pomocą Pythona i bazy danych?

Python ma doskonałą obsługę baz danych wbudowaną w swoją standardową bibliotekę, dzięki czemu można tworzyć i wchodzić w interakcje z bazą danych bez polegania na zewnętrznych frameworkach, takich jak Django ORM.

Integracja Pythona z SQLite oferuje wydajne rozwiązanie do zarządzania przechowywaniem danych dzięki swojej lekkiej strukturze, co czyni go dostępnym dla programistów chcących ulepszyć swoje aplikacje. Implementując prostą aplikację do rejestracji użytkowników, można uzyskać wgląd w podstawowe koncepcje programowania baz danych w ekosystemie Pythona.

Jak utworzyć bazę danych w Pythonie

Kod wykorzystany w tym samouczku jest dostępny w repozytorium GitHub, do którego można uzyskać dostęp w celu zbadania i wdrożenia omawianych tutaj koncepcji.

Aby nawiązać komunikację z bazą danych za pomocą Pythona, niezbędne jest posiadanie zarówno obiektu połączenia, jak i obiektu kursora. Pierwszy z nich umożliwia ustanowienie połączenia między aplikacją a bazą danych, podczas gdy drugi pozwala na wykonywanie instrukcji SQL w bazie danych.

Aby ustanowić połączenie między aplikacją Python a istniejącą bazą danych lub alternatywnie utworzyć nową przy użyciu SQLite, należy wykonać określone kroki. Proces tworzenia połączenia z bazą danych w Pythonie dla SQLite obejmuje kilka kluczowych elementów, takich jak określenie silnika bazy danych, podanie niezbędnych danych uwierzytelniających, zdefiniowanie parametrów połączenia i wreszcie połączenie z żądaną instancją bazy danych. Dzięki starannemu przestrzeganiu tych kroków, możliwe jest pomyślne ustanowienie bezpiecznego i wydajnego połączenia z bazą danych w bazie kodu Python, wykorzystując moc SQLite.

 import sqlite3

# Connect to a (new) database
conn = sqlite3.connect('path/to/database.db')

# Close the connection
conn.close()

Metoda connect() akceptuje katalog reprezentujący istniejący plik bazy danych. W przypadku, gdy podana ścieżka nie zawiera żadnej bazy danych, zostanie ona utworzona. Zaleca się zwolnienie połączenia z bazą danych po zakończeniu interakcji w celu efektywnego zarządzania zasobami.

Aby ułatwić interakcję z połączoną bazą danych w Pythonie, konieczne jest użycie kursora. Implementacja kursora pozwala na wykonywanie zapytań Structured Query Language (SQL) w ramach programu Python. Aby utworzyć kursor, wykonaj następujące kroki:

 cursor = conn.cursor()

# Close the cursor
cursor.close()

Otwarty obiekt połączenia może zostać wykorzystany do wygenerowania kursora poprzez wywołanie jego metody cursor() .

Jak wykonać transakcję bazy danych w Pythonie

Wykorzystanie kursora umożliwia wykonywanie instrukcji SQL, zapytań lub sekwencji skryptowych w celu pobierania lub modyfikowania danych lub dostosowywania konfiguracji schematu bazy danych.

Istnieją trzy podstawowe podejścia, które można zastosować w celu przeprowadzenia transakcji w bazie danych, a mianowicie:

⭐ Cursor.execute . Ta metoda uruchomi pojedynczą instrukcję SQL. Oto jak jej używać:

 cursor.execute("""
    CREATE TABLE IF NOT EXISTS users (
        name TEXT,
        age INTEGER
    )
""")

Ten kod wywołuje metodę execute na kursorze, przekazując mu ciąg zawierający instrukcję SQL.

⭐ Cursor.executemany . Ta metoda pozwala uruchomić tę samą instrukcję SQL więcej niż raz, z różnymi parametrami za każdym razem. Przyjmuje dwa argumenty: instrukcję SQL i iterowalną. Dobrym zastosowaniem jest wstawianie kilku obiektów do bazy danych jednocześnie:

 data = [
    ('Alice', 25),
    ('Bob', 30),
    ('Charlie', 22)
]

cursor.executemany("""INSERT INTO users (name, age) VALUES (?, ?)""", data)

Powyższy kod wykorzystuje metodę executemany do wielokrotnego wstawiania wartości do bazy danych.

Należy zwrócić uwagę na instancje zastępcze obecne w danej instrukcji SQL. Metoda executemany wstawi następnie odpowiednie dane dla każdego pojedynczego elementu.

⭐ Cursor.executescript . Jak sama nazwa wskazuje, metoda ta wykonuje skrypt SQL. Możesz napisać instrukcje SQL w innym pliku i uruchomić je za pomocą metody executescript:

 with open("path/to/script.sql") as file:
 sql_script = file.read()

cursor.executescript(sql_script)

Jak zbudować aplikację rejestracyjną za pomocą Pythona i SQLite3

Opracowanie skutecznej aplikacji rejestracyjnej wymaga przechwycenia danych użytkownika końcowego przy użyciu Pythona, a następnie zachowania ich w systemie zarządzania relacyjną bazą danych, takim jak SQLite3. Ta seria wskazówek zilustruje proces tworzenia podstawowej platformy rejestracyjnej przy użyciu Pythona i SQLite3.

Krok 1: Połączenie z istniejącą bazą danych lub utworzenie nowej

Aby rozpocząć działanie aplikacji, konieczne jest utworzenie nowej bazy danych lub integracja z istniejącą.

 import sqlite3

conn = sqlite3.connect('database.db')

cursor = conn.cursor()

# your app's code goes here

cursor.close()

conn.close()

Kod nawiązuje połączenie z bazą danych poprzez utworzenie obiektu połączenia, który ułatwia komunikację między aplikacją a bazą danych. Dodatkowo generuje kursor, który umożliwia wydajne pobieranie danych z bazy danych w odpowiedzi na zapytania SQL.

Krok 2: Utwórz tabelę dla użytkowników

Aby utworzyć repozytorium danych dla rejestracji użytkowników, konieczne jest wygenerowanie tabeli za pomocą kursora myszy.Można to osiągnąć, wykonując następujące kroki:

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

conn.commit()

Niniejsza implementacja ułatwia generowanie tabeli o nazwie “users” w istniejącej bazie danych, jeśli nie została ona jeszcze utworzona. Za pomocą tego procesu tworzone są cztery odrębne kolumny, aby pomieścić dane dotyczące poszczególnych użytkowników. W szczególności zapewnienie pojedynczego pola “e-mail” służy jako mechanizm uniemożliwiający użytkownikom dokonywanie wielokrotnych rejestracji pod identycznymi adresami poczty elektronicznej, zapewniając w ten sposób, że każde konto pozostaje jednoznacznie identyfikowalne i wyróżniające się.

Rzeczywiście, wykonanie conn.commit jest kluczowe dla zatwierdzenia zapytania do bazy danych, bez którego żadne modyfikacje nie zostałyby odzwierciedlone w bazie danych.

Wykorzystanie metody executescript zapewnia alternatywne podejście poprzez włączenie instrukcji COMMIT bezpośrednio w skrypcie SQL, eliminując w ten sposób potrzebę jawnego wywoływania conn.commit .

Krok 3: Zbieranie danych użytkownika

Włączenie funkcji Pythona ułatwia recykling kodu, dzięki czemu rozsądne jest ustanowienie funkcji zarządzającej aspektem rejestracji. Funkcja ta będzie gromadzić imię, nazwisko, adres e-mail i hasło użytkownika.

 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: ")

Krok 4: Sprawdź poprawność hasła

Jasne, oto przykład tego, jak można zmodyfikować funkcję register_user w Pythonie, aby wymagać od użytkowników dwukrotnego wprowadzenia hasła i monitować o ponowne wprowadzenie, jeśli nie pasuje:pythondef register_user(username, email, password):# Sprawdź, czy nazwa użytkownika już istniejesexisting_user = User.objects.filter(username=username).first()if existing_user:raise ValueError(“Username already taken”)# Create new user objectuser = User.objects.create_user(username, email, password)# Save user object to databaseuser.save()return f"{username}, {email} - {password}"

 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: ")

        # Check password correctness
        if password1 == password2:
            print("You have successfully registered!")
            break
        else:
            print("Your passwords must match")

Aby zapewnić dokładność tworzenia kont, użytkownicy są teraz zobowiązani do sprawdzenia, czy podane przez nich hasło jest identyczne podczas rejestracji. Środek ten eliminuje potencjalne rozbieżności w kombinacjach nazwy użytkownika i hasła, zwiększając w ten sposób ogólną integralność systemu.

Krok 5: Sprawdź unikalność adresu e-mail

Instrukcja SQL, która ustanawia tabelę użytkowników, określa, że pole e-mail musi być charakterystyczne. W związku z tym, w przypadku, gdy użytkownik próbuje zarejestrować się przy użyciu adresu e-mail, który został wcześniej zarejestrowany, system zarządzania bazą danych wygeneruje wyjątek.Aby aplikacja mogła skutecznie i łagodnie zareagować na taką sytuację, konieczne jest zaimplementowanie odpowiednich mechanizmów obsługi w kodzie Pythona w celu zarządzania i przetwarzania wygenerowanego wyjątku.

 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: ")

        # 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.")

Obecna implementacja wykorzystuje klauzulę try-except do zarządzania wszelkimi błędami wynikającymi ze zduplikowanych adresów e-mail podczas operacji na bazie danych. W przypadku napotkania błędu IntegrityError w trakcie procesu iteracyjnego, przepływ sterowania jest kierowany z powrotem do zapytania wejściowego o odrębny adres e-mail od użytkownika.

W tej konkretnej aplikacji rozsądne jest założenie, że każdy przypadek IntegrityError wynikający z utworzenia nowego konta użytkownika byłby spowodowany obecnością zduplikowanego adresu e-mail. Jednak w praktyce można zastosować bardziej kompleksowe podejście do obsługi błędów, które może obejmować dodatkowe kwestie wykraczające poza zwykłe duplikaty w domenie e-mail.

Krok 6: Wstawienie danych użytkownika do bazy danych

Włączenie zebranych informacji od użytkownika do bazy danych wymaga wykonania instrukcji strukturalnego języka zapytań (SQL). Aby wykonać to zadanie, można zastosować zapytanie SQL w swoim programie. Poprzez odpowiednie dostosowanie bloku try-except, aplikacja jest w stanie z powodzeniem przechowywać dane użytkownika w bazie danych.

 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.")

W zaktualizowanej instrukcji try-except kursor wykonuje akcję wstawiania SQL. Następnie metoda conn.commit rozpoczyna operację SQL na bazie danych.

Jeśli wykonałeś wszystkie powyższe kroki, powinieneś mieć aplikację, która rejestruje użytkowników i zapisuje ich w bazie danych. Możesz użyć aplikacji takiej jak DB Browser for SQLite , aby wyświetlić zawartość bazy danych:

/pl/images/sqlite-browse-database-1.jpg

Używanie baz danych zamiast typów kolekcji

W przypadku niewielkich aplikacji o stosunkowo prostych strukturach danych, tworzenie niestandardowych zapytań SQL lub korzystanie z lekkiej biblioteki Object Relational Mapping (ORM), takiej jak SQLAlchemy, może być praktycznym podejściem. Niemniej jednak, podczas rozwijania większych, bardziej skomplikowanych systemów, w których relacje danych stają się coraz bardziej rozbudowane, wykorzystanie uznanego frameworka, takiego jak ORM w Django, może zaoferować znaczące korzyści pod względem wydajności, łatwości utrzymania i rozszerzalności.

Aby dalej doskonalić swoją biegłość w niskopoziomowych operacjach bazodanowych, rozważ wdrożenie mechanizmu logowania, który uzupełnia istniejący proces rejestracji użytkowników.