Як створити реєстраційну програму за допомогою Python і бази даних

Python має потужну інтеграцію з базами даних, яка вбудована у стандартну бібліотеку. Це дозволяє створювати та керувати базами даних без потреби у зовнішніх інструментах, таких як Django ORM.

SQLite – це легка база даних, яку просто інтегрувати в Python. Розгляньмо основні принципи програмування баз даних у Python на прикладі простої програми реєстрації користувачів.

Створення бази даних в Python

Для створення та управління базою даних в Python потрібні два ключові компоненти: з’єднання та курсор.

З’єднання встановлює зв’язок з існуючою базою даних або створює нову. Ось приклад створення з’єднання з базою даних SQLite у Python:

 import sqlite3


conn = sqlite3.connect('шлях/до/бази/даних.db')


conn.close()

Метод `connect()` вказує шлях до існуючої бази даних. Якщо за вказаним шляхом немає бази даних, вона буде створена. Важливо закривати з’єднання з базою даних після завершення роботи з нею.

Курсор надає можливість взаємодіяти з підключеною базою даних. Він використовується для виконання SQL запитів у вашій Python програмі. Ось як створити курсор:

 cursor = conn.cursor()


cursor.close()

Курсор створюється викликом методу `cursor()` для відкритого об’єкта з’єднання.

Виконання транзакцій з базою даних в Python

За допомогою курсора можна виконувати SQL запити, команди або скрипти для читання, запису або зміни даних, а також для модифікації структури бази даних.

Існує три основні методи для виконання транзакцій з базою даних:

  • `cursor.execute`. Цей метод виконує один SQL оператор. Ось приклад його використання:
     cursor.execute("""
        CREATE TABLE IF NOT EXISTS users (
            name TEXT,
            age INTEGER
        )
    """)

    Цей код викликає метод `execute` для курсора, передаючи йому рядок з SQL оператором.

  • `cursor.executemany`. Цей метод дозволяє виконувати один і той же SQL оператор декілька разів з різними параметрами. Він приймає два аргументи: SQL оператор та ітерований об’єкт. Це зручно для одночасного вставлення багатьох об’єктів у базу даних:
     data = [
        ('Alice', 25),
        ('Bob', 30),
        ('Charlie', 22)
    ]

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

    Наведений вище код використовує метод `executemany` для багаторазового вставлення значень у базу даних.

    Зверніть увагу на символи `?` у SQL операторі. Метод `executemany` замінює їх на відповідні значення для кожного об’єкта.

  • `cursor.executescript`. Як випливає з назви, цей метод виконує SQL скрипт. Ви можете написати свої SQL оператори в окремому файлі та виконати їх за допомогою методу `executescript`:
     with open("шлях/до/скрипту.sql") as file:
    sql_script = file.read()

    cursor.executescript(sql_script)

  • Розробка програми реєстрації з використанням Python і SQLite3

    Логіка програми реєстрації полягає в отриманні інформації про користувача за допомогою Python і її збереженні в базі даних. Наступні кроки покажуть, як створити просту систему реєстрації за допомогою Python та SQLite3.

    Крок 1: З’єднання з існуючою базою даних або створення нової

    Почніть зі створення бази даних для вашої програми або підключення до вже існуючої:

     import sqlite3

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

    cursor = conn.cursor()

    cursor.close()

    conn.close()

    Наведений вище код створює об’єкт з’єднання та курсор для взаємодії з базою даних.

    Крок 2: Створення таблиці для користувачів

    Для зберігання даних, які користувачі вводитимуть під час реєстрації, потрібна таблиця. Ось як її створити за допомогою курсора:

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

    conn.commit()

    Цей код створить таблицю під назвою “users”, якщо її ще немає у базі даних. Він створює чотири стовпці в таблиці для зберігання інформації про користувача. Поле email є унікальним, щоб запобігти створенню кількох облікових записів з однією адресою електронної пошти.

    Виклик `conn.commit` важливий для застосування змін до бази даних. Без нього зміни не будуть збережені.

    Якщо ви використовуєте метод `executescript`, ви можете додати ключове слово `COMMIT` в кінці вашого SQL файлу, тому вам не потрібно буде викликати `conn.commit`.

    Крок 3: Збір даних користувача

    Функції Python спрощують повторне використання коду, тому розумно створити функцію для обробки процесу реєстрації. Ця функція збирає ім’я, прізвище, адресу електронної пошти та пароль користувача.

     def register_user():
        first_name = input("Введіть ваше ім'я: ")
        last_name = input("Введіть ваше прізвище: ")
        email = input("Введіть вашу електронну пошту: ")
        password1 = input("Введіть ваш пароль: ")
        password2 = input("Підтвердіть ваш пароль: ")

    Крок 4: Перевірка правильності пароля

    Змініть функцію `register_user` так, щоб перевірити, чи користувач двічі ввів однаковий пароль. Якщо вони не збігаються, ви повинні запропонувати їм повторно ввести пароль. Це можна зробити за допомогою такого циклу:

     def register_user():
        first_name = input("Введіть ваше ім'я: ")
        last_name = input("Введіть ваше прізвище: ")
        email = input("Введіть вашу електронну пошту: ")

        while True:
            password1 = input("Введіть ваш пароль: ")
            password2 = input("Підтвердіть ваш пароль: ")

            
            if password1 == password2:
                print("Ви успішно зареєструвалися!")
                break
            else:
                print("Ваші паролі повинні співпадати")

    Завдяки цій зміні, користувач не зможе зареєструватися, якщо його паролі не збігаються.

    Крок 5: Перевірка унікальності електронної пошти

    SQL оператор, який створює таблицю користувачів, визначає поле електронної пошти як унікальне. Це означає, що база даних поверне помилку, якщо користувач зареєструється, використовуючи електронну адресу, яка вже існує. Щоб правильно обробити цю ситуацію, потрібно обробити виняток Python:

     def register_user():
        first_name = input("Введіть ваше ім'я: ")
        last_name = input("Введіть ваше прізвище: ")

        while True:
            email = input("Введіть вашу електронну пошту: ")
            password1 = input("Введіть ваш пароль: ")
            password2 = input("Підтвердіть ваш пароль: ")

            
            if password1 == password2:
                try:
                    print("Ви успішно створили обліковий запис.")
                    break
                except sqlite3.IntegrityError:
                    print("Помилка: Ця електронна пошта вже зареєстрована.")
            else:
                print("Ваші паролі повинні співпадати.")

    У цьому коді використовується блок `try-except` для обробки помилки, яка виникає через дублікати електронних адрес. Якщо база даних видає `IntegrityError`, цикл `while` продовжиться, пропонуючи користувачеві ввести іншу адресу електронної пошти.

    Для цього прикладу програми можна з упевненістю припустити, що помилка `IntegrityError` виникне лише в результаті дублювання електронної адреси. У справжній програмі ви, ймовірно, використовуватимете більш розширену обробку помилок для вирішення інших проблем, які можуть виникнути.

    Крок 6: Вставка даних користувача в базу даних

    Тепер, коли ви зібрали та перевірили дані користувача, настав час додати їх до бази даних. Для цього можна використовувати SQL запит. Змініть ваш блок `try-except` наступним чином:

     try:
        cursor.execute("""
            INSERT INTO users (first_name, last_name, email, password)
            VALUES (?, ?, ?, ?)
        """, (first_name, last_name, email, password2))

        conn.commit()
        print("Ви успішно створили обліковий запис.")
        break
    except sqlite3.IntegrityError:
        print("Помилка: Ця електронна пошта вже зареєстрована.")

    У зміненому блоці `try-except` курсор виконує операцію вставки SQL. Нарешті, метод `conn.commit` фіксує операцію SQL до бази даних.

    Якщо ви виконали всі описані вище кроки, у вас має бути програма, яка реєструє користувачів і зберігає їх у базі даних. Ви можете скористатися таким інструментом, як DB Browser for SQLite щоб переглянути вміст вашої бази даних:

    Використання баз даних замість типів колекцій

    Для простих баз даних вам може бути простіше написати власний код. Однак, у міру того, як ваша програма зростатиме, а ваша база даних стане складнішою, варто розглянути використання інструменту на кшталт Django ORM, щоб спростити цей процес.

    Щоб продовжити вдосконалювати свої навички роботи з базами даних, спробуйте додати систему входу до програми реєстрації.