Python/modul/pymysql

< Python‎ | modul

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);