🔖 Справочник команд и методов

⚡ Краткий справочник

  • CREATE DATABASE IF NOT EXISTS bookstore — создать базу данных.
  • CREATE TABLE IF NOT EXISTS ... — создать таблицу.
  • INSERT INTO ... VALUES (%s, %s) — вставить строку параметризованно.
  • SELECT ... WHERE ... = %s — найти строки параметризованно.
  • UPDATE ... SET ... WHERE ... = %s — обновить строки параметризованно.
  • pymysql.connect(**config) — подключение к MySQL.
  • cursor.execute(query, params) — выполнить запрос с параметрами.
  • connection.commit() — зафиксировать изменения.

SQL: создание объектов

КомандаОписаниеПример
CREATE DATABASE IF NOT EXISTS имя Создаёт базу данных, если её ещё нет CREATE DATABASE IF NOT EXISTS bookstore
USE имя Выбирает текущую базу данных USE bookstore
CREATE TABLE IF NOT EXISTS имя (...) Создаёт таблицу с указанными столбцами CREATE TABLE IF NOT EXISTS books (...)
SHOW DATABASES Возвращает список баз данных SHOW DATABASES
SHOW TABLES Возвращает список таблиц в текущей БД SHOW TABLES
DROP DATABASE имя Удаляет базу данных и все её таблицы DROP DATABASE bookstore

SQL: манипуляции с данными

КомандаОписаниеПример
INSERT INTO table (col1, col2) VALUES (%s, %s) Добавляет новую строку INSERT INTO books (title, author) VALUES (%s, %s)
SELECT * FROM table WHERE col = %s Выбирает строки по условию SELECT id FROM users WHERE username = %s
UPDATE table SET col = %s WHERE id = %s Обновляет существующие строки UPDATE books SET stock = %s WHERE id = %s
DELETE FROM table WHERE col = %s Удаляет строки по условию DELETE FROM books WHERE id = %s
SELECT * FROM books WHERE title LIKE %s Поиск по шаблону (% — любые символы) WHERE title LIKE '%Python%'

Типы данных MySQL

ТипНазначениеПример
INTЦелые числаstock INT
AUTO_INCREMENTАвтоматический счётчик для idid INT AUTO_INCREMENT PRIMARY KEY
VARCHAR(n)Строка переменной длины до n символовusername VARCHAR(100)
DECIMAL(p, s)Число с фиксированной точностьюprice DECIMAL(10, 2)
CHECK (условие)Ограничение на значение столбцаstock INT CHECK (stock >= 0)

Методы PyMySQL

МетодОписаниеПример
pymysql.connect(**config) Создаёт соединение с базой данных conn = pymysql.connect(host="...", user="...", password="...")
connection.cursor() Создаёт курсор для выполнения запросов with connection.cursor() as cursor:
cursor.execute(query, params) Выполняет один параметризованный запрос 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})")