cursor.execute("SELECT * FROM books WHERE id = %s", (1,))
cursor.fetchone()
Возвращает одну строку результата или None
row = cursor.fetchone()
cursor.fetchall()
Возвращает список всех строк результата
rows = cursor.fetchall()
connection.commit()
Сохраняет изменения в базе данных
connection.commit()
connection.rollback()
Откатывает незафиксированные изменения
connection.rollback()
Работа с CSV в Python
Конструкция
Описание
Пример
open(filename, encoding="utf-8")
Открывает текстовый файл
with open("books.csv", encoding="utf-8") as file:
line.strip().split(",")
Разбивает строку по запятым
parts = line.strip().split(",")
csv.reader(file)
Итератор по строкам CSV
import csv; reader = csv.reader(file)
csv.DictReader(file)
Читает CSV как словари по заголовкам
for row in csv.DictReader(file): print(row["title"])
Фильтр LIKE
Оператор LIKE используется для поиска по шаблону. Символ % заменяет любую последовательность символов, символ _ — ровно один символ.
-- Найти все книги, в названии которых есть слово "Python"
SELECT * FROM books WHERE title LIKE '%Python%';
-- Найти книги, автор которых начинается на "G"
SELECT * FROM books WHERE author LIKE 'G%';
В параметризованном запросе шаблон передаётся как обычное значение:
pattern = f"%{keyword}%"
cursor.execute("SELECT * FROM books WHERE title LIKE %s", (pattern,))
Параметризованные запросы
Плейсхолдер %s используется в PyMySQL для всех типов данных, не только для строк. Значения передаются кортежем вторым аргументом execute():
# Правильно: параметризованный запрос
cursor.execute("INSERT INTO books (title, price) VALUES (%s, %s)", ("1984", 8.99))
# Неправильно: SQL-инъекция через f-string
cursor.execute(f"INSERT INTO books (title, price) VALUES ('{title}', {price})")