Fork me on GitHub

MySQL

MySQL is an open source relational database implementation for storing and retrieving data.

MySQL logo.

MySQL or PostgreSQL?

MySQL is a viable open source database implementation for Python web applications. MySQL has a slightly easier initial learning curve than PostgreSQL. However, PostgreSQL's design is often preferred by Python web developers, especially when data migrations are run as an application evolves.

MySQL is an implementation of the relational database concept. Learn more in the data chapter or view the table of contents for all topics.

Python Drivers for MySQL

Accessing MySQL from a Python application requires a database driver (also called a "connector"). While it is possible to write a driver as part of your application, in practice most developers use an existing open source driver.

There was a major issue with MySQL drivers since the introduction of Python 3. One of the most popular libraries called MySQLdb did not work in its existing form with Python 3 and there were no plans to update it. Therefore a fork of MySQLdb named mysqlclient added Python 3 compatibility.

The mysqlclient fork was good in that existing MySQLdb users could drop mysqlclient into existing projects that were upgrading to Python 3. However, the fork often causes confusion when searching for which Python driver to use with MySQL. Many developer simply decide to use PostgreSQL because there is better support for Python drivers in the PostgreSQL community.

With that driver support context in mind, it's absolutely possible to build a Python 3 web application with MySQL as a backend. Here is a list of drivers along with whether it supports Python 2, 3 or both.

  • mysqlclient is a fork of MySQLdb that supports Python 2 and 3.

  • MySQL Connector is Oracle's "official" (Oracle currently owns MySQL) Python connector. The driver supports Python 2 and 3, just make sure to check the version guide for what releases work with which Python versions.

  • MySQLdb supports Python 2 and was frequently used by Python web applications before the mass migration to Python 3 began.

  • PyMySQL is a pure Python (no C low-level code) implementation that attempts to be a drop-in replacement for MySQLdb. However, some MySQL APIs are not supported by the driver so whether or not your application can use this connector will depend on what you're building.

What organizations use MySQL?

The database is deployed in production at some of the highest trafficked sites such as Twitter, Facebook and many others major organizations. However, since MySQL AB, the company that developed MySQL, was purchased by Sun Microsystems (which was in turn purchased by Oracle), there have been major defections away from the database by Wikipedia and Google. MySQL remains a viable database option but I always recommend new Python developers learn PostgreSQL if they do not already know MySQL.

Python-specific MySQL resources

General MySQL resources

Learn more about data or go to web frameworks?

Tell me about standard relational databases.

What're these NoSQL data stores hipster developers keep talking about?

I want to learn how to code a Python web application using a framework.

Sign up here to receive a monthly email with major updates to this site, tutorials and discount codes for Python books.