Лекція 10. Робота з БД

Сайт: Навчально-інформаційний портал НУБіП України
Курс: Кросплатформне програмування (Python)
Книга: Лекція 10. Робота з БД
Надруковано: Гість-користувач
Дата: субота, 7 червня 2025, 20:03

Опис

СУБД SQLite. Підключення до бази даних. Отримання та запис даних в
таблиці БД. Особливості роботи з віддаленою БД.

1. СУБД SQLite. Підключення до бази даних. Отримання та запис даних в таблиці БД. Особливості роботи з віддаленою БД.

Приклад логічної структури БД.

База складатиметься з чотирьох таблиць:

users (користувачі).
Posts (публікації).
comments (коментарі).
likes (лайки).

SQLite

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

Більш того, бази SQLite не потребують сервера і самодостатні, оскільки просто зчитують та записують дані у файл. На відміну від MySQL та PostgreSQL, для виконання операцій з базами даних навіть не потрібно встановлювати та запускати серверну програму.

Приклад:

import sqlite3
from sqlite3 import Error

def create_connection(path):
       connection = None
       try:
	connection = sqlite3.connect(path)
	print(«Підключення до бази даних SQLite пройшло успішно")
       except Error as e:
	print(f«Виникла помилка '{e}’»)
       return connection

 

  • Метод "sqlite3.connect(path)" повертає об'єкт "(connection)". Його ж, своєю чергою, повертає і функція «create_connection()».
  • Об'єкт connection можна використовувати для виконання запитів до бази SQLite. Наступний скрипт встановлює підключення до SQLite:
connection = create_connection(«my_bd.sqlite")

Коли ви запустите скрипт бази даних SQL, побачите, що у кореневому каталозі створено файл бази даних «my_bd.sqlite». Шлях до файлу можна змінити.

Запис даних у БД.

Для роботою з БД створюється курсор, за допомогою якого можна виконувати SQL код.

cursor = connection.cursor()

Створення таблиці (одноразово)

cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER
)
''')
connection.commit()


Додавання даних (INSERT)

cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Марія", 30))
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Ігор", 25))
connection.commit()


Використання ? — це захищає від SQL-ін’єкцій (параметризований запит).

Отримання даних (SELECT)
- Всі записи:

cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()

for row in rows:
    print(row)  # (1, 'Марія', 30), (2, 'Ігор', 25)


- Один запис:

cursor.execute("SELECT * FROM users WHERE name = ?", ("Марія",))
user = cursor.fetchone()
print(user)  # (1, 'Марія', 30)

Закриття з'єднання

cursor.close()
conn.close()

2. MySQL

На відміну від SQLite, у Python немає вбудованого модуля для підключення до баз MySQL. Щоб підключитися до бази MySQL із Python, потрібно встановити відповідний SQL-драйвер. Один з таких - "mysql-connector-python".

Завантажити цей модуль SQL можна за допомогою менеджера пакетів «pip»:

 pip install mysql-connector-python

Врахуйте, що MySQL – серверна СУБД. Тому одному сервері може бути багато баз. На відміну від SQLite, де підключення до бази рівносильно її створенню, MySQL для створення бази потрібні два кроки:

  • Підключення до сервера MySQL.
  • Виконання запиту на створення бази даних SQL.
import mysql.connector

conn = mysql.connector.connect(
    host="localhost",
    user="root",
    password="your_password",
    database="testdb"
)

cursor = conn.cursor()


Основні елементи:

  • Connection - Це об'єкт, що представляє активне з'єднання з MySQL-сервером.
  • Cursor - Об’єкт для виконання SQL-запитів через з’єднання.
  • Cxecute - Запити передаються параметризовано — не через f-рядки, щоб уникнути SQL-ін'єкцій.
  • Сommit - MySQL за замовчуванням працює у транзакційному режимі, тому після INSERT/UPDATE/DELETE треба викликати .commit():
  • rollback() - Використовується для відкату змін у разі помилки
  • close() - Завжди потрібно закривати після завершення роботи, щоб уникнути витоку ресурсів.

Виконання SQL коду

# Створення таблиць
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    age INT
)
""")

# Додавання елементів
cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("Олена", 32))
conn.commit()

# Отримання даних
cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
    print(row)

# Видалення даних
cursor.execute("DELETE FROM users WHERE name = %s", ("Олена",))
conn.commit()

# Закриття підключення до БД
cursor.close()
conn.close()

# Оновлення даних
cursor.execute("UPDATE users SET age = %s WHERE name = %s", (33, "Олена"))
conn.commit()

Доступність

Шрифти Шрифти

Розмір шрифта Розмір шрифта

1

Колір тексту Колір тексту

Колір тла Колір тла

Кернінг шрифтів Кернінг шрифтів

Видимість картинок Видимість картинок

Інтервал між літерами Інтервал між літерами

0

Висота рядка Висота рядка

1.2

Виділити посилання Виділити посилання