mariadb, mysql-connector-python, pymysql
Дуже хороше питання — воно насправді важливе, якщо ти хочеш зрозуміти, який драйвер дає кращу сумісність, продуктивність і стабільність при роботі з MySQL/MariaDB. Розберімо по пунктах:
1. mysql-connector-python
Розробник: Oracle Ліцензія: GPLv2 Офіційний драйвер для MySQL
Переваги:
✅ Офіційна підтримка Oracle — тобто повна сумісність з MySQL і регулярні оновлення.
✅ Pure Python або C-розширення — можна вибрати версію (pure Python — кросплатформенна, C — швидша).
✅ Підтримує prepared statements, transactions, connection pooling.
✅ Сумісність з MySQL 8.x — включаючи нові фічі (наприклад, authentication plugins).
Недоліки:
❌ Повільніший у деяких випадках, ніж PyMySQL (через офіційну, але "важку" реалізацію).
❌ Може мати дрібні несумісності з MariaDB (через фічі MySQL 8, яких немає в MariaDB).
2. PyMySQL
Розробник: Спільнота (open-source) Ліцензія: MIT Реалізований повністю на Python
Переваги:
✅ Простий, легкий, чисто на Python (немає потреби в компіляції C-модулів).
✅ Працює і з MySQL, і з MariaDB — сумісність дуже висока.
✅ Добре інтегрується з ORM-ами типу SQLAlchemy.
✅ MIT-ліцензія — простіша для комерційного використання.
Недоліки:
❌ Повільніший за драйвери з C-розширеннями (mysqlclient чи mysql-connector C).
❌ Іноді відстає у підтримці нових фіч MySQL 8.x.
3. MariaDB — чи має свій драйвер?
Так, має!
Називається mariadb (Python package: mariadb).
Розробник: MariaDB Corporation Ліцензія: LGPL Реалізація: C API + Python bindings
Переваги:
✅ Офіційна підтримка MariaDB (найкраща сумісність).
✅ Найвища швидкість серед трьох (бо написаний на C).
✅ Підтримка всіх MariaDB-специфічних фіч (наприклад, system versioned tables, plugin auth).
✅ Добре працює з MariaDB 10.x і вище.
Недоліки:
❌ Потрібна C-бібліотека libmariadb у системі (не pure Python).
❌ Трохи складніше встановлювати, ніж PyMySQL.
❌ Може не підтримувати всі MySQL-специфічні фічі (якщо база — чистий MySQL 8).
4. Коротке порівняння
mysql-connector-python
Oracle
Python/C
Середня
Часткова
Повна
GPLv2
PyMySQL
Спільнота
Pure Python
Нижча
Висока
Висока (але не всі фічі)
MIT
mariadb
MariaDB Corp.
C + Python
Висока
Ідеальна
Часткова
LGPL
Рекомендація:
Якщо твоя база MariaDB — краще
mariadb, офіційний драйвер.Якщо хочеш максимально просту установку і кросплатформеність —
PyMySQL.Якщо база MySQL 8 і потрібна повна підтримка його нових фіч —
mysql-connector-python.
Добре. Якщо в тебе MariaDB, то найкраще рішення — офіційний драйвер mariadb (розроблений MariaDB Corporation). Розпишу по порядку: встановлення → підключення → використання → важливі нюанси.
1. Встановлення
Спочатку потрібна системна бібліотека libmariadb (вона входить до пакету клієнтських утиліт MariaDB).
Ubuntu / Debian:
sudo apt update
sudo apt install libmariadb3 libmariadb-dev python3-devПотім ставимо сам Python-драйвер:
pip install mariadb2. Перевірка встановлення
python3 -m mariadbЯкщо він виведе коротку довідку — значить усе нормально.
3. Підключення до бази
import mariadb
import sys
try:
conn = mariadb.connect(
user="username",
password="password",
host="localhost",
port=3306,
database="testdb"
)
print("Підключення успішне!")
except mariadb.Error as e:
print(f"Помилка підключення до бази: {e}")
sys.exit(1)
cur = conn.cursor()
# Приклад запиту
cur.execute("SELECT id, name FROM users")
for (id, name) in cur:
print(id, name)
conn.close()4. Вставка та транзакції
cur = conn.cursor()
try:
cur.execute(
"INSERT INTO users (name, email) VALUES (?, ?)",
("Олексій", "olex@example.com")
)
conn.commit() # зберігаємо зміни
except mariadb.Error as e:
print(f"Помилка: {e}")
conn.rollback() # якщо треба відкотити транзакціюЗверни увагу: замість
%s, як у MySQLdb чи PyMySQL, тут використовуються знаки питання?у prepared statements.
5. Закриття з’єднання
cur.close()
conn.close()6. Основні особливості mariadb-драйвера
Prepared Statements
✅
Connection Pooling
✅
Transactions
✅
SSL-з’єднання
✅
Cursor iteration
✅
MariaDB Authentication Plugins
✅
MySQL 8 Authentication
⚠️ Частково
Async I/O
❌ (поки що немає офіційної async підтримки)
7. Connection Pool (опціонально)
pool = mariadb.ConnectionPool(
pool_name="mypool",
pool_size=5,
user="username",
password="password",
host="localhost",
database="testdb"
)
conn = pool.get_connection()
cur = conn.cursor()
cur.execute("SELECT COUNT(*) FROM users")
print(cur.fetchone())
cur.close()
conn.close()Це корисно для вебсайтів — не відкривати нове з’єднання на кожен запит.
8. Збірка без sudo (якщо на сервері без root)
Якщо ти не можеш ставити системні бібліотеки:
pip install mariadb --user --only-binary mariadbале це спрацює тільки якщо є готовий wheel для твоєї платформи. Інакше доведеться зібрати вручну (тоді потрібен libmariadb-dev).
9. Порада для CGI або невеликих сайтів
Оскільки у тебе сайт на чистому Python (CGI), не використовуй постійний пул, бо CGI запускає процес окремо для кожного запиту. Просто відкривай і закривай з’єднання в кожному запиті (це безпечно для низького навантаження).
Хочеш, я покажу приклад інтеграції з твоїм CGI-сценарієм (щоб прямо на сайті виконати SQL-запит)?
Last updated