Python/modul/pymysql

Z Wikiverzity
< Python‎ | modul
Skočit na navigaci Skočit na vyhledávání

pymysql je pythoní modul pro práci s SQL databází MySQL (ryze pythoní alternativa k MySQLdb)

Konektory k MySQL[editovat]

Pro práci s s MySQL databází existují v Pythonu dva velmi podobné konektory, které používají stejnou syntax (proto je probíráme v jednom článku najednou), ale je mezi nimi jeden zásadní rozdíl:

  • MySQLdb – napsaný v jazyce C
  • pymysql – napsaný v Pythonu

Kromě nich existuje mysql.connector od Oracle, který má ale jinou syntax a tak je probírán v samostaném článku Python/modul/mysql.connector.

Info[editovat]

Externí odkazy[editovat]

Instalace[editovat]

MySQLdb[editovat]

Instalace tohoto modulu může být někdy svízelná:

Ubezpečíme se, že máme nainstalováno:

apt-get install python-dev libmysqlclient-dev

a potom:

sudo pip3 install MySQL-python

Může hodit chybu:

ImportError: No module named 'ConfigParser'

Tak tedy:

sudo pip3 install ConfigParser

...

SyntaxError: invalid syntax

Tak tedy zkusíme nainstalovat rovnou debianovský balík

sudo apt-get install python-mysqldb

pymysql[editovat]

Naproti tomu instalace pymysql se většinou obejde bez potíží:

sudo pip3 install pymysql

Obě alternativy[editovat]

Pokud chceme, aby náš skript pracoval nezávisle na tom, který z obou modulů je v systému nainstalován, uvedeme do záhlaví skriptu kód:

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass

Viz What is pymysql and how does it differ from mysqldb? Can it affect Django deployment?

Tutoriál[editovat]

Vytvoření databáze[editovat]

Databázi pytest si zatím vytvoříme předem pomocí PHPMyAdmin nebo pomocí klienta mysql

CREATE TABLE IF NOT EXISTS `seznam` (
  `id` int(11) NOT NULL,
  `name` varchar(10) COLLATE utf8_czech_ci DEFAULT NULL,
  `number` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

INSERT INTO `seznam` (`id`, `name`, `number`) VALUES
(1, 'Adam', 111),
(2, 'Božena', 222),
(3, 'Cyril', 333),
(4, 'David', 444);