Skip to content
Pure Python MySQL Client
Python Shell
Branch: master
Clone or download

Latest commit

javacruft Fix test suite compatibility with MySQL 8 (#840)
MySQL 8 deprecates the use of display format for int columns:

 https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html

This results in warnings being generated during test suite
execution which results in test failures.

Drop use of display widths - they don't materially change the tests
so this should be safe across all MySQL versions and variants.
Latest commit 9f1b856 Feb 14, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Small grammar chenge to ISSUE_TEMPLATE.md (#544) Jan 27, 2017
.travis travis: faster DB startup wait (#773) Jan 17, 2019
docs Drop Python 3.4 support (#762) Dec 18, 2018
pymysql Fix test suite compatibility with MySQL 8 (#840) Feb 14, 2020
tests Add sha256 and chaching_sha2 auth support (#682) Jun 26, 2018
.coveragerc merge from master Aug 30, 2015
.gitignore Add Pipfile.lock to gitignore Jul 4, 2018
.travis.yml Add Python 3.8 support (#822) Nov 7, 2019
CHANGELOG fix spelling mistakes in changelog (#808) Aug 30, 2019
LICENSE Change brief description and update year in copyright notice. Oct 3, 2013
MANIFEST.in Don't install test files (#706) Jul 4, 2018
README.rst Drop Python 3.4 support (#762) Dec 18, 2018
example.py Fix PEP8 in example Jan 15, 2016
requirements-dev.txt Add pytest to requirements-dev Dec 20, 2018
setup.cfg Don't install test files (#706) Jul 4, 2018
setup.py Add Python 3.8 support (#822) Nov 7, 2019
tox.ini Add Python 3.8 support (#822) Nov 7, 2019

README.rst

Documentation Status https://travis-ci.org/PyMySQL/PyMySQL.svg?branch=master https://coveralls.io/repos/PyMySQL/PyMySQL/badge.svg?branch=master&service=github

PyMySQL

This package contains a pure-Python MySQL client library, based on PEP 249.

Most public APIs are compatible with mysqlclient and MySQLdb.

NOTE: PyMySQL doesn't support low level APIs _mysql provides like data_seek, store_result, and use_result. You should use high level APIs defined in PEP 249. But some APIs like autocommit and ping are supported because PEP 249 doesn't cover their usecase.

Requirements

  • Python -- one of the following:
  • MySQL Server -- one of the following:

Installation

Package is uploaded on PyPI.

You can install it with pip:

$ python3 -m pip install PyMySQL

To use "sha256_password" or "caching_sha2_password" for authenticate, you need to install additional dependency:

$ python3 -m pip install PyMySQL[rsa]

Documentation

Documentation is available online: https://pymysql.readthedocs.io/

For support, please refer to the StackOverflow.

Example

The following examples make use of a simple table

CREATE TABLE `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `email` varchar(255) COLLATE utf8_bin NOT NULL,
    `password` varchar(255) COLLATE utf8_bin NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
AUTO_INCREMENT=1 ;
import pymysql.cursors

# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='user',
                             password='passwd',
                             db='db',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

try:
    with connection.cursor() as cursor:
        # Create a new record
        sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
        cursor.execute(sql, ('webmaster@python.org', 'very-secret'))

    # connection is not autocommit by default. So you must commit to save
    # your changes.
    connection.commit()

    with connection.cursor() as cursor:
        # Read a single record
        sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
        cursor.execute(sql, ('webmaster@python.org',))
        result = cursor.fetchone()
        print(result)
finally:
    connection.close()

This example will print:

{'password': 'very-secret', 'id': 1}

Resources

License

PyMySQL is released under the MIT License. See LICENSE for more information.

You can’t perform that action at this time.