Mysql connector python windows

Project description

MySQL Connector/Python enables Python programs to access MySQL databases, using
an API that is compliant with the Python Database API Specification v2.0
(PEP 249) — We refer to it as the
Classic API.

Features

  • Asynchronous Connectivity

  • C-extension

  • Telemetry

Installation

Connector/Python contains the classic and XDevAPI connector APIs, which are
installed separately. Any of these can be installed from a binary
or source distribution.

Binaries are distributed in the following package formats:

  • RPM

  • WHEEL

On the other hand, the source code is distributed as a compressed file
from which a wheel package can be built.

The recommended way to install Connector/Python is via pip,
which relies on WHEEL packages. For such a reason, it is the installation procedure
that is going to be described moving forward.

Please, refer to the official MySQL documentation Connector/Python Installation to
know more about installing from an RPM, or building and installing a WHEEL package from
a source distribution.

Before installing a package with pip, it is strongly suggested
to have the most recent pip version installed on your system.
If your system already has pip installed, you might need to update it. Or you can use
the standalone pip installer.

$ pip install mysql-connector-python

Installation Options

Connector packages included in MySQL Connector/Python allow you to install
optional dependencies to unleash certain functionalities.

# 3rd party packages to unleash the telemetry functionality are installed
$ pip install mysql-connector-python[telemetry]

This installation option can be seen as a shortcut to install all the
dependencies needed by a particular feature. Mind that this is optional
and you are free to install the required dependencies by yourself.

Available options:

  • dns-srv

  • gssapi

  • fido2

  • telemetry

Sample Code

import mysql.connector

# Connect to server
cnx = mysql.connector.connect(
    host="127.0.0.1",
    port=3306,
    user="mike",
    password="s3cre3t!")

# Get a cursor
cur = cnx.cursor()

# Execute a query
cur.execute("SELECT CURDATE()")

# Fetch one result
row = cur.fetchone()
print("Current date is: {0}".format(row[0]))

# Close connection
cnx.close()

Additional Resources

  • MySQL Connector/Python Developer Guide

  • MySQL Connector/Python Forum

  • MySQL Public Bug Tracker

  • Slack (Sign-up required if you do not have an Oracle account)

  • Stack Overflow

  • Oracle Blogs

Contributing

There are a few ways to contribute to the Connector/Python code. Please refer
to the contributing guidelines for additional information.

License

Please refer to the README.txt and LICENSE.txt
files, available in this repository, for further details.

Project details

Download files

Download the file for your platform. If you’re not sure which to choose, learn more about installing packages.

Source Distribution

Built Distributions

File details

Details for the file mysql-connector-python-9.3.0.tar.gz.

File metadata

  • Download URL:
    mysql-connector-python-9.3.0.tar.gz

  • Upload date:
  • Size: 942.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for mysql-connector-python-9.3.0.tar.gz

Algorithm Hash digest
SHA256 8b16d51447e3603f18478fb5a19b333bfb73fb58f872eb055a105635f53d2345
MD5 530d54288a5a8f7e04e7b67b580c5181
BLAKE2b-256 825e55b265cb95938e271208e5692d7e615c53f2aeea894ab72a9f14ab198e9a

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-py2.py3-none-any.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-py2.py3-none-any.whl

  • Upload date:
  • Size: 399.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-py2.py3-none-any.whl

Algorithm Hash digest
SHA256 8ab7719d614cf5463521082fab86afc21ada504b538166090e00eeaa1ff729bc
MD5 0a195274239f8271b7842bcc62340d4a
BLAKE2b-256 231d8c2c6672094b538f4881f7714e5332fdcddd05a7e196cbc9eb4a9b5e9a45

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp313-cp313-win_amd64.whl

  • Upload date:
  • Size: 16.4 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp313-cp313-win_amd64.whl

Algorithm Hash digest
SHA256 2a5de57814217077a8672063167b616b1034a37b614b93abcb602cc0b8c6fade
MD5 a5d3803ee13de877ea0e44cf1122122c
BLAKE2b-256 c25ec361caa024ce14ffc1f5b153d90f0febf5e9483a60c4b5c84e1e012363cc

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp313-cp313-manylinux_2_28_x86_64.whl

  • Upload date:
  • Size: 33.9 MB
  • Tags: CPython 3.13, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp313-cp313-manylinux_2_28_x86_64.whl

Algorithm Hash digest
SHA256 4364d3a37c449f1c0bb9e52fd4eddc620126b9897b6b9f2fd1b3f33dacc16356
MD5 fc0ab7f880ca5424aba72e5f47b2ae92
BLAKE2b-256 18127ccbc678a130df0f751596b37eddb98b2e40930d0ebc9ee41965ffbf0b92

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp313-cp313-manylinux_2_28_aarch64.whl

  • Upload date:
  • Size: 33.5 MB
  • Tags: CPython 3.13, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp313-cp313-manylinux_2_28_aarch64.whl

Algorithm Hash digest
SHA256 be0ef15f6023ae2037347498f005a4471f694f8a6b8384c3194895e153120286
MD5 2cc10188c92c02f7d4419558e922cd47
BLAKE2b-256 4c1936983937347b6a58af546950c88a9403cdce944893850e80ffb7f602a099

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp313-cp313-macosx_14_0_x86_64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp313-cp313-macosx_14_0_x86_64.whl

  • Upload date:
  • Size: 16.0 MB
  • Tags: CPython 3.13, macOS 14.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp313-cp313-macosx_14_0_x86_64.whl

Algorithm Hash digest
SHA256 495798dd34445d749991fb3a2aa87b4205100676939556d8d4aab5d5558e7a1f
MD5 4388520e0cc02c84ae9c0bad9b4b76d5
BLAKE2b-256 db4022de86e966e648ea0e3e438ad523c86d0cf4866b3841e248726fb4afded8

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp313-cp313-macosx_14_0_arm64.whl

  • Upload date:
  • Size: 15.2 MB
  • Tags: CPython 3.13, macOS 14.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp313-cp313-macosx_14_0_arm64.whl

Algorithm Hash digest
SHA256 9516a4cdbaee3c9200f0e7d9aafb31057692f45c202cdcb43a3f9b37c94e7c84
MD5 18a39f103b1845abc4ab20b93a39ca43
BLAKE2b-256 6a165762061505a0d0d3a333613b6f5d7b8eb3222a689aa32f71ed15f1532ad1

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp312-cp312-win_amd64.whl

  • Upload date:
  • Size: 16.4 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp312-cp312-win_amd64.whl

Algorithm Hash digest
SHA256 3853799f4b719357ea25eba05f5f278a158a85a5c8209b3d058947a948bc9262
MD5 89aac636233b0b771606c183da95e801
BLAKE2b-256 c2daf81eeb5b63dea3ebe035fbbbdc036ae517155ad73f2e9640ee7c9eace09d

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp312-cp312-manylinux_2_28_x86_64.whl

  • Upload date:
  • Size: 33.9 MB
  • Tags: CPython 3.12, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp312-cp312-manylinux_2_28_x86_64.whl

Algorithm Hash digest
SHA256 0aedee809e1f8dbab6b2732f51ee1619b54a56d15b9070655bc31fb822c1a015
MD5 425eb6098473a721ef693f327ae64904
BLAKE2b-256 76659609a96edc0d015d1017176974c42b955cf87ba92cd31765f99cba835715

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp312-cp312-manylinux_2_28_aarch64.whl

  • Upload date:
  • Size: 33.5 MB
  • Tags: CPython 3.12, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp312-cp312-manylinux_2_28_aarch64.whl

Algorithm Hash digest
SHA256 d33e2f88e1d4b15844cfed2bb6e90612525ba2c1af2fb10b4a25b2c89a1fe49a
MD5 717b15059c8392d1cfced65bc2fff57a
BLAKE2b-256 5a5dcd63f31bf5d0536ee1e4216fb2f3f57175ca1e0dd37e1e8139083d2156e8

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp312-cp312-macosx_14_0_x86_64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp312-cp312-macosx_14_0_x86_64.whl

  • Upload date:
  • Size: 16.0 MB
  • Tags: CPython 3.12, macOS 14.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp312-cp312-macosx_14_0_x86_64.whl

Algorithm Hash digest
SHA256 1916256ecd039f4673715550d28138416bac5962335e06d36f7434c47feb5232
MD5 fccaff1d5e2139a0a76a5f9c6381b660
BLAKE2b-256 27879cd7e803c762c5098683c83837d2258c2f83cf82d33fabd1d0eaadae06ee

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp312-cp312-macosx_14_0_arm64.whl

  • Upload date:
  • Size: 15.2 MB
  • Tags: CPython 3.12, macOS 14.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp312-cp312-macosx_14_0_arm64.whl

Algorithm Hash digest
SHA256 2589af070babdff9c920ee37f929218d80afa704f4e2a99f1ddcb13d19de4450
MD5 c6eaaac3025c902370ee1f79d64afaa0
BLAKE2b-256 bf73b42061ea4c0500edad4f92834ed7d75b1a740d11970e531c5be4dc1af5cd

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp311-cp311-win_amd64.whl

  • Upload date:
  • Size: 16.4 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.20.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.8

File hashes

Hashes for mysql_connector_python-9.3.0-cp311-cp311-win_amd64.whl

Algorithm Hash digest
SHA256 f10fe89397e8da81026d8143e17fc5c12ae5e66e51753a0f49e1db179c4f7113
MD5 8d120c4d200d0185e61c94c831e9b256
BLAKE2b-256 ec5563567fa4082aa22bad5cecaf16fe3604f026aea40b06d0bf2a9fd75212ff

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp311-cp311-manylinux_2_28_x86_64.whl

  • Upload date:
  • Size: 33.9 MB
  • Tags: CPython 3.11, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.20.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.8

File hashes

Hashes for mysql_connector_python-9.3.0-cp311-cp311-manylinux_2_28_x86_64.whl

Algorithm Hash digest
SHA256 9c898c5f3e34314ed825f2ffdd52d674e03d59c45d02ac8083a8ec5173c1e0f8
MD5 519be8d092c124fb2656ff3b99feb5c8
BLAKE2b-256 b93896a602ad402fb71175d83bed3178bd8c16e04251d279e314e0bc53e0b861

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp311-cp311-manylinux_2_28_aarch64.whl

  • Upload date:
  • Size: 33.5 MB
  • Tags: CPython 3.11, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.20.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.8

File hashes

Hashes for mysql_connector_python-9.3.0-cp311-cp311-manylinux_2_28_aarch64.whl

Algorithm Hash digest
SHA256 9cc8d3c2f45d16b064b0063db857f8a7187b8659253dd32e3f19df1bf1d55ea0
MD5 b2ef5ba5f2956b3efa553b6823413faa
BLAKE2b-256 88f4088022373f0b71aae6f3190278423fce1fe0c31ecbddf33eb5c0cbf87c4d

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp311-cp311-macosx_14_0_x86_64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp311-cp311-macosx_14_0_x86_64.whl

  • Upload date:
  • Size: 16.0 MB
  • Tags: CPython 3.11, macOS 14.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.20.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.8

File hashes

Hashes for mysql_connector_python-9.3.0-cp311-cp311-macosx_14_0_x86_64.whl

Algorithm Hash digest
SHA256 cb72fcda90b616f0b2d3dae257441e06e8896b2780c3dddc6a65275ec1408d9a
MD5 c10cd8b41b6084c180a0d0067203413a
BLAKE2b-256 14ae4ac81d7dc2ce8dff22fd63fa16d4562b113ef0458b04bd958675da3adc74

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp311-cp311-macosx_14_0_arm64.whl

  • Upload date:
  • Size: 15.1 MB
  • Tags: CPython 3.11, macOS 14.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.20.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.8

File hashes

Hashes for mysql_connector_python-9.3.0-cp311-cp311-macosx_14_0_arm64.whl

Algorithm Hash digest
SHA256 e8b0131006608e533b8eab20078f9e65486068c984ed3efd28413d350d241f44
MD5 484a7edc4f7ffbba6d4fe05ee4fb0270
BLAKE2b-256 6559fa9bef2d9a7eafdc5629b82916e4e1e29446c9bbb0b33706988bbf541b18

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp310-cp310-win_amd64.whl

  • Upload date:
  • Size: 16.4 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.20.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.8

File hashes

Hashes for mysql_connector_python-9.3.0-cp310-cp310-win_amd64.whl

Algorithm Hash digest
SHA256 e24be22a5d96f3535afa5dd331166b02bf72655ea6ed6a2a0eb548c313548788
MD5 662f693733cd244c794d281e65355f37
BLAKE2b-256 5853a04fc2186f90fdd2a52d02856f15f2c3c894215799bdaeb313899e75a27b

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp310-cp310-manylinux_2_28_x86_64.whl

  • Upload date:
  • Size: 33.8 MB
  • Tags: CPython 3.10, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.20.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.8

File hashes

Hashes for mysql_connector_python-9.3.0-cp310-cp310-manylinux_2_28_x86_64.whl

Algorithm Hash digest
SHA256 d47a0d5b2b9b02f06647d5d7bbb19e237f234d6be91d0e0c935629faacf0797f
MD5 594ce638c64d9ce25bc2fbe68194c39b
BLAKE2b-256 a25f10a89734281ac9d74c7e3bc44f42dbf2105709435ea1bebfbc71e214af18

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp310-cp310-manylinux_2_28_aarch64.whl

  • Upload date:
  • Size: 33.4 MB
  • Tags: CPython 3.10, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.20.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.8

File hashes

Hashes for mysql_connector_python-9.3.0-cp310-cp310-manylinux_2_28_aarch64.whl

Algorithm Hash digest
SHA256 5508ff6b79d8d46b15791401784a1b5abd10c8e05aec2684c4a50e92c5893cd2
MD5 8f78f3c2cb36e4e6ef72fc3019f6f5eb
BLAKE2b-256 0a98ce72b24c53327dbe0a2520f8a0828a18726bcb8e4f2012b274a4507bbed3

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp310-cp310-macosx_14_0_x86_64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp310-cp310-macosx_14_0_x86_64.whl

  • Upload date:
  • Size: 16.0 MB
  • Tags: CPython 3.10, macOS 14.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.20.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.8

File hashes

Hashes for mysql_connector_python-9.3.0-cp310-cp310-macosx_14_0_x86_64.whl

Algorithm Hash digest
SHA256 ee1a901c287471013570e29cdf5ca7159898af31cf3a582180eadd41c96b42c9
MD5 f5b8c3765c8f4714ac73e7464c505f68
BLAKE2b-256 41aeabd18c61277ec9e00c36de6a4f53f84003ae9fc34ca6077241a19e2c440f

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp310-cp310-macosx_14_0_arm64.whl

  • Upload date:
  • Size: 15.1 MB
  • Tags: CPython 3.10, macOS 14.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.20.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.8

File hashes

Hashes for mysql_connector_python-9.3.0-cp310-cp310-macosx_14_0_arm64.whl

Algorithm Hash digest
SHA256 f979e712187796ad57cd0bef76666dd48ed4887104775833c9489ea837144ad8
MD5 f4bc4ad05798d630c61863a2eaaf47d7
BLAKE2b-256 59f8b36f551601a4b942e2014f80a0bfa5f2f0da30ef2710182cc96d875a5852

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp39-cp39-win_amd64.whl

  • Upload date:
  • Size: 16.4 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp39-cp39-win_amd64.whl

Algorithm Hash digest
SHA256 55d4a8ace6f97d58d9318d1250d903b0d3b100a6b798442a99c4ac966b974d12
MD5 9ecbac45c91737d381e102d56d55f62b
BLAKE2b-256 9e1792c08f2e622267b8a7a92c9c29e2cdb4a8c906917d99db741854e49d9cac

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp39-cp39-manylinux_2_28_x86_64.whl

  • Upload date:
  • Size: 33.8 MB
  • Tags: CPython 3.9, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp39-cp39-manylinux_2_28_x86_64.whl

Algorithm Hash digest
SHA256 66d48ec0ee903a84bcaf5d4d1901ed536fdd90ce6ecae0686f094b4530faf545
MD5 370d25b7576f6b2ccc5049b0d642a1f8
BLAKE2b-256 ebc37ab2e4c9c6f941544d3751abe37c874faf4a26ebad3c6b7eabe36ac21c70

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp39-cp39-manylinux_2_28_aarch64.whl

  • Upload date:
  • Size: 33.4 MB
  • Tags: CPython 3.9, manylinux: glibc 2.28+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp39-cp39-manylinux_2_28_aarch64.whl

Algorithm Hash digest
SHA256 ac70a7128f7e690dc0f4376be8366c7e5c8fa47a785232b8abba948576f016ff
MD5 e24ff62aa1705b83187b0b469b0ef6bd
BLAKE2b-256 a13cf90e6b7d7b9d74d26048fa00215df76f4581d4d8ea62ba8556080db05d81

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp39-cp39-macosx_14_0_x86_64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp39-cp39-macosx_14_0_x86_64.whl

  • Upload date:
  • Size: 16.0 MB
  • Tags: CPython 3.9, macOS 14.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp39-cp39-macosx_14_0_x86_64.whl

Algorithm Hash digest
SHA256 d87c9e8b5aa9a16cefebe017ee45ddfbad53e668f94d01fe2e055bb8daab9353
MD5 c18631e17e3232e7755337f3b7be112e
BLAKE2b-256 da637544c0cb6f4ec18fe33e7fc67ccba26501383da26d1daf4e5d2900a15c1b

See more details on using hashes here.

File details

Details for the file mysql_connector_python-9.3.0-cp39-cp39-macosx_14_0_arm64.whl.

File metadata

  • Download URL:
    mysql_connector_python-9.3.0-cp39-cp39-macosx_14_0_arm64.whl

  • Upload date:
  • Size: 15.1 MB
  • Tags: CPython 3.9, macOS 14.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for mysql_connector_python-9.3.0-cp39-cp39-macosx_14_0_arm64.whl

Algorithm Hash digest
SHA256 8c79b500f1f9f12761426199d0498309ee5d20c94ed94fc8ae356679667f8181
MD5 a5d39050076a785b5ca6f7a8df871a3d
BLAKE2b-256 edfb97f8e2cff2fbde6ccc4b6bc7ae38a8e0b85793049940c54fc46408d22ff9

See more details on using hashes here.

Home » Python » Databases » Install MySQL Connector Python on Windows, MacOs, Linux, Unix and Ubuntu

In this lesson, You will learn how to Install MySQL Connector Python on Windows, macOS, Linux, Unix, and Ubuntu using pip and vis source code. To connect to a MySQL server from Python, you need a database driver (module). MySQL Connector Python is the official Oracle-supported driver to connect MySQL through Python.

Table of contents

  • Download and Install MySQL Connector Python on Windows
    • Install MySQL Connector Python on Windows using a Source Code Distribution:-
    • Verifying MySQL Connector/Python installation on windows
  • Download and Install MySQL Connector Python on Linux
    • Verifying MySQL Connector Python installation on Linux
  • Download and Install MySQL Connector Python on MacOs
  • Install MySQL Connector Python on Ubuntu
  • Next Steps:

Prerequisites before installing MySQL Connector Python

  • You need root or administrator privileges to perform the installation process.
  • Python must be installed on your machine.

Note: – MySQL Connector Python requires Python to be in the system’s PATH. Installation fails if it doesn’t find Python.

  • Python is generally located in a directory included in the default PATH setting on Unix and Unix-like systems.
  • On Windows, If Python doesn’t exist in the system’s PATH, please manually add the directory containing python.exe yourself.

This article applies to: – 


Platform(s): 64-bit Windows, Windows 10, Windows 7, Windows 8, Windows Vista, Windows XP, Linux, Ubuntu Linux, Debian Linux, SUSE Linux, Red Hat Linux, Fedora, MacOs.
Python version(s): Python 2 and 3
MySQL Version(s): Greater than 4.1

Ways to install MySQL Connector Python

There are multiple ways to install Oracle’s MySQL Connector Python on your machine. The following are a few ways.

  • Install MySQL Connector Python using the pip command
  • Install MySQL connector python via source code (via ZIP or TAR file)
  • Use Built Distribution A package created in the native packaging format intended for a given platform. For example, RPM packages for Linux or MSI installer for windows.

Python MySQL Connector Versions

Please refer to the following table of MySQL connector Python versions. You need to install a module that is compatible with your Python version.

MySQL Connector Python MySQL Versions Python Versions
8.0 8.0, 5.7, 5.6, 5.5 3.6, 3.5, 3.4, 2.7
2.2 5.7, 5.6, 5.5 3.5, 3.4, 2.7
2.1 5.7, 5.6, 5.5 3.5, 3.4, 2.7, 2.6
2.0 5.7, 5.6, 5.5 3.5, 3.4, 2.7, 2.6
1.2 5.7, 5.6, 5.5 (5.1, 5.0, 4.1) 3.4, 3.3, 3.2, 3.1, 2.7, 2.6

Great! Now you can choose the version as per your need.

Pip Command to install MySQL Connector python

It is always accessible and straightforward to install any module using pip in Python. MySQL Connector Python is available on pypi.org, so you can install it using the pip command.

pip install mysql-connector-pythonCode language: Python (python)

If you are facing any problem while installing, please mention the module’s version and then try to install it again. Refer to the above table to install the correct version.

pip install mysql-connector-python==8.0.11Code language: Python (python)

If you are facing pip install fails error with connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598). You can solve this error.

You can ignore SSL errors by setting pypi.org and files.pythonhosted.org as trusted hosts. Please try following the pip command to install MySQL Connector Python.

python -m pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host pypi.python.org mysql-connector-pythonCode language: Python (python)

Verifying MySQL Connector Python installation

You should get the following messages after running pip command: –

  • Collecting mysql-connector-python
  • Downloading packages.
  • Requirement already satisfied: setup tools in D:python\python37-32\lib\site-packages.
  • Installing collected packages:  mysql-connector-python
  • Successfully installed mysql-connector-python-8.0.13

Verify MySQL Connector Python installation by Connecting to MySQL Using MySQL Connector Python.


If you are unable to install using pip you can install using the following approaches.

There are two ways to install MySQL Connector Python on windows.

  1. Install using Source Code Distribution ( Platform Independent and Architecture Independent ZIP Archive)
  2. Install using Built Distribution i.e., MSI installer

Install MySQL Connector Python on Windows using a Source Code Distribution:-

Follow below instruction to download Platform Independent ZIP. Go to download MySQL Connector Python for windows from here

download MySQL connector python for windows

download MySQL connector python for windows
  • Abobe URL automatically opens the latest version of MySQL Connector Python.
  • If you want to use the older version which is compatible with your python version, then select “Looking for previous GA versions” option which you can find at the right side.
  • If you want to check which version of MySQL Connector Python is compatible with your python version, refer to the above table.

I am downloading 2.1.7 because I am using Python 3.5. Select Platform independent from the drop-down list

select MySQL connector python platform independent zip for windows

select MySQL connector python platform-independent zip for windows

Click on the “download” button to download the ZIP file on your machine. After clicking download you get the below screen, click on No Thanks, start the download option.

begin download MySQL connector python zip file for windows

begin to download MySQL connector python zip file for windows

Note: If you want to download the latest version, i.e. 8.0.1 then select “Looking for the latest GA versions” option which you can find at the right side.

After the download is complete, please follow the below steps to install: –

  • Unpack or extract the Zip archive in the intended installation directory (for example, C:\mysql-connector\) using 7Zip or another tool that can read .zip files.
  • Start a console window and change the location to the folder where you unpacked the Zip archive:
    C:\> cd C:\mysql-connector\
  •  Inside the MySQL Connector Python folder, perform the installation using this command:
    C:\> python setup.py install

You should get the following screen after this command.

python MySQL connector python installation completed for windows

Python MySQL connector python installation completed for windows

Verifying MySQL Connector/Python installation on windows

To verify MySQL connection Python is installed and to make sure that it is working correctly and you can connect to the MySQL database server without any issues. To verify the installation use the following steps:

  • On Windows, the default MySQL Connector Python installation location is C:\Python.Version\Lib\sitepackages\ . Here Python.version is the Python version you used to install the connector.
  • Type importing MySQL connector using import mysql.connector. If it is executed successfully mean installation completed successfully.
  • Also, you can check that MySQL Connector Python installation is working and able to connect to MySQL Server by Connecting to MySQL Using MySQL Connector Python.

Download and Install MySQL Connector Python on Linux

There are two ways to install MySQL Connector Python on For Unix and Unix-like systems such as Linux, Solaris, macOS, and FreeBSD.

  1. Install using Source Code Distribution ( Platform Independent (Architecture Independent), TAR File)
  2. You can install using Built Distribution for Example RPM file.

Install MySQL Connector Python on Linux using Source Code Distribution. Follow the below instructions to download MySQL connector python Platform Independent TAR (tar.gz) file.

Go to download MySQL Connector Python for Linux from here it will open the below screen.

download MySQL connector python for Linux

download MySQL connector python for Linux
  • It opens the latest version of MySQL connector python. Choose the Previous GA version from the right side if you want to install a version other than 8.0.1. you can refer to the above table to check which version is compatible with your python version.
  • Select Platform independent TAR from the “Select Operating System” drop-down list. I am downloading 2.1.7 because I am using Python 3.5
MySQL connector python platform independent tar for Linux

MySQL connector python platform-independent tar for Linux

Choose the TAR archive file and click on the download button. You should get the following screen, click on the start of my download.

MySQL connector python begin your download for Linux

MySQL connector python begin your download for Linux

After the download is complete, please follow the below steps to install: –

  • Untar the downloaded tar.gz file. Use below command to untar.
    shell>tar xzf mysql-connector-python-VERSION.tar.gz
  • Change to the directory where you extracted a tar file
    shell> cd mysql-connector-python-VERSION
  • Execute shell> sudo python setup.py install command to install MySQL connector python on Linux.
  • To see all options and commands supported by setup.py use python setup.py --help command

Verifying MySQL Connector Python installation on Linux

To verify the installation, use the following steps:

  • On Unix-like systems, the default Connector/Python installation location is /prefix/python.VERSION/site-packages/ where prefix is the location where Python installed, and VERSION is the Python version.
  • Type import mysql.connector and execute the program. If it is executed successfully mean installation completed successfully.
  • Also, you can check that MySQL Connector Python installation is working and able to connect to MySQL Server by Connecting to MySQL Using MySQL Connector Python.

Download and Install MySQL Connector Python on MacOs

You can Installing MySQL Connector Python on macOS Using a Disk Image.

  • Go to download MySQL Connector python for macOS from here
    Download and install mysql connector python macOs

  • Refer the above table to check which version is compatible with your python version
  • Download the mysql-connector-python-8.0.11-macos10.13.dmg file. it is an architecture Independent DMG file.
  • .Install the downloaded MySQL Connector Python by opening it and double-clicking the resulting .pkg file.

Verifying MySQL Connector Python installation on macOS

Check that MySQL Connector Python installation is working and able to connect to MySQL Server by Connecting to MySQL Using MySQL Connector Python.

Install MySQL Connector Python on Ubuntu

Use the following command to install MySQL connector Python on Ubuntu.

sudo apt-get install mysql-connector-python

After this run the following command.

pip install mysql-connector-python

You can replace pip with pip3 if the command fails in Python3. If the above approach doesn’t work, you can still install it on Ubuntu using the source code.

  • Go to download MySQL Connector python for Ubuntu from here.
  • Select the Operating system Ubuntu Linux from the drop-down.
  • Select the OS version as an architecture-independent. I am selecting Ubuntu-Linux 16.04 (architecture-independent).
  •  You should get two entries fro DEB Package python for MySQL Connector Python (For python 2 and Python 3).
install MySQL connector python on Ubuntu

install MySQL connector python on Ubuntu
  • Download the listed DEB package and install it using the following commands.
  • First, unpack the DEB file and then install it.
    sudo dpkg -i /path_to_downloaded_deb_file

    After this run the following command.

    sudo apt-get install -f
  • You are now done with installing MySQL Connector Python on Ubuntu.
  • Next Steps:

    To practice what you learned in this article, Please solve a Python Database Exercise project to Practice and master the Python Database operations.

    About Vishal

    I’m Vishal Hule, the Founder of PYnative.com. As a Python developer, I enjoy assisting students, developers, and learners. Follow me on Twitter.

    Python Exercises and Quizzes

    Free coding exercises and quizzes cover Python basics, data structure, data analytics, and more.

    • 15+ Topic-specific Exercises and Quizzes
    • Each Exercise contains 10 questions
    • Each Quiz contains 12-15 MCQ

    Last Updated :
    25 Mar, 2025

    MySQL is a Relational Database Management System (RDBMS) whereas the structured Query Language (SQL) is the language used for handling the RDBMS using commands i.e Creating, Inserting, Updating and Deleting the data from the databases. A connector is employed when we have to use MySQL with other programming languages. The work of mysql-connector is to provide access to MySQL Driver to the required language. Thus, it generates a connection between the programming language and the MySQL Server.

    Installation Instructions

    To install Python-mysql-connector module, one must have Python and PIP, preinstalled on their system. To check if our system already contains Python, go through the following instructions:

    Step 1: Check if Python is Installed

    Open the Command line(search for cmd in the Run dialog(Windows + R). Now run the following command:

    python –version

    If Python is already installed, it will generate a message with the Python version available.

    Python-Verification

    If Python is not present, go through How to install Python on Windows and Linux? and follow the instructions provided.  

    Step 2: Check if PIP is Installed

    PIP is a package management system used to install and manage software packages/libraries written in Python. These files are stored in a large “on-line repository” termed as Python Package Index (PyPI). To check if PIP is already installed on our system, just go to the command line and execute the following command:

    pip –version

    PIP-Verification

    If PIP is not present, go through How to install PIP on Windows and Linux?

    Step 3: Install MySQL Connector for Python

    Once Python and PIP are installed, we can proceed with installing the MySQL Connector package for Python.

    For Windows

    mysql-connector method can be installed on Windows with the use of following command:

    pip install mysql-connector-python

    Installing-mysql-connector-windows

    For Linux

    mysql-connector method can be installed on Linux with the use of following command:

    pip3 install mysql-connector

    Installing-mysql-connector-Linux

    Публикация представляет собой незначительно сокращенный перевод статьи Чайтаньи Баведжи Python and MySQL Database: A Practical Introduction. Материал также адаптирован в виде блокнота Jupyter.

    ***

    Большинство приложений в той или иной форме взаимодействует с данными. Поэтому языки программирования (Python не исключение), предоставляют инструменты хранения источников данных и доступа к ним. MySQL — одна из самых популярных систем управления базами данных (СУБД). В прошлом году она заняла второе место после СУБД Oracle в рейтинге баз данных.

    Используя методы, описанные в этом руководстве, вы сможете эффективно интегрировать базу данных MySQL в приложение на Python. В ходе руководства мы разработаем небольшую базу данных MySQL для системы рейтинга фильмов и узнаем, как забирать из нее данные с помощью Python-кода.

    К концу этого урока вы сможете:

    • Подключить ваше приложение к базе данных MySQL
    • Сделать запрос к базе данных для получения необходимых данных
    • Обработать исключения, возникающие при доступе к базе данных

    Чтобы получить максимальную отдачу от этого руководства, желательно иметь практические знания о таких концепциях Python, как цикл for, функции, обработка исключений. Также необходимо иметь базовые представления о SQL-запросах, таких как SELECT, DROP, CREATE и JOIN.

    Сравнение MySQL с другими SQL-базами данных

    SQL (Structured Query Language) — язык структурированных запросов. SQL является широко используемым языком программирования для управления реляционными базами данных. Возможно, вы слышали о различных СУБД на основе SQL: MySQL, PostgreSQL, SQLite и SQL Server. Все эти базы данных соответствуют стандартам SQL, но отличаются в деталях.

    В силу открытости исходного кода MySQL быстро стал лидером рынка среди SQL-решений. В настоящее время MySQL используется всеми крупными техническими фирмами, включая Google, LinkedIn, Uber, Netflix, Twitter и другие.

    Помимо поддержки со стороны open source-сообщества, есть и другие причины успеха MySQL:

    1. Простота установки. MySQL разработан, чтобы быть удобным для пользователя. Базу данных легко создать и настроить. MySQL доступен для основных операционных систем, включая Windows, macOS, Linux и Solaris.
    2. Скорость. MySQL имеет репутацию быстрого решения для баз данных. Еще эта СУБД хорошо масштабируется.
    3. Права пользователя и безопасность. MySQL позволяет устанавливать уровни безопасности паролей, добавлять и удалять привилегии учетным записям пользователей. Управление правами пользователей выглядит существенно проще, чем у многих других СУБД, таких как PostgreSQL, где управление файлами конфигурации, требует некоторой сноровки.

    MySQL использует синтаксис, похожий на стандартный SQL, однако имеющий некоторые важные отличия, описанные в официальной документации.

    🐍🎓 Библиотека собеса по Python

    🐍🧩 Библиотека задач по Python

    Установка MySQL Server и MySQL Connector

    Чтобы начать работу с этим руководством, вам необходимо настроить две вещи: MySQL Server и MySQL Connector. MySQL Server предоставит ресурсы, необходимые для работы с базой данных. После запуска сервера вы сможете подключить к нему свое приложение Python с помощью MySQL Connector/Python.

    Установка MySQL Server

    Официальная документация описывает рекомендуемые способы загрузки и установки MySQL Server. Есть инструкции для всех популярных операционных систем, включая Windows, macOS, Solaris, Linux и многие другие.

    Для Windows лучше всего загрузить установщик MySQL и позволить ему позаботиться о процессе. Диспетчер установки также поможет настроить параметры безопасности сервера MySQL. На странице учетных записей будет необходимо ввести пароль для root-записи и при желании добавить других пользователей с различными привилегиями.

    Настройка учетной записи MySQL

    Настройка учетной записи MySQL

    С помощью установщиков можно настроить и другие полезные инструменты, например, MySQL Workbench. Удобная альтернатива установке в операционной системе — развернуть MySQL с помощью Docker.

    Установка MySQL Connector/Python

    Драйвер базы данных — программное обеспечение, позволяющее приложению подключаться и взаимодействовать с СУБД. Такие драйверы обычно поставляются в виде отдельных модулей. Сандартный интерфейс, которому должны соответствовать все драйверы баз данных Python, описан в PEP 249. Драйверы баз данных Python, такие как sqlite3 для SQLite, psycopg для PostgreSQL и MySQL Connector/Python для MySQL, следуют этим правилам.

    Для установки драйвера (коннектора) воспользуемся менеджером пакетов pip:

            pip install mysql-connector-python
        

    pip установит коннектор в текущую активную среду. Чтобы работать с проектом изолированным образом, мы рекомендуем настроить виртуальную среду.

    Проверим результат установки, запустив в терминале Python следующую команду:

            import mysql.connector
        

    Если инструкция импорта выполняется без ошибок, значит mysql.connector успешно установлен и готов к использованию.

    MySQL ― это серверная система управления базами данных. Один сервер может содержать несколько баз данных. Чтобы взаимодействовать с базой данных, мы должны установить соединение с сервером. Рабочий процесс программы Python, которая взаимодействует с базой данных на основе MySQL, в общих чертах выглядит следующим образом:

    1. Подключаемся к серверу MySQL.
    2. Создаем новую базу данных (при необходимости).
    3. Соединяемся с базой данных.
    4. Выполняем SQL-запрос, собираем результаты.
    5. Сообщаем базе данных, если в таблицу внесены изменения.
    6. Закрываем соединение с сервером MySQL.

    Каким бы ни было приложение, первый шаг ― связать между собой приложение и базу данных.

    🤖🎓 Библиотека Data Science для собеса

    🤖🧩 Библиотека задач по Data Science

    Подключаемся к серверу MySQL из Python

    Чтобы установить соединение, используем connect() из модуля mysql.connector. Эта функция принимает параметры host, user и password, а возвращает объект MySQLConnection. Учетные данные можно получить в результате ввода от пользователя:

            from getpass import getpass
    from mysql.connector import connect, Error
    
    try:
        with connect(
            host="localhost",
            user=input("Имя пользователя: "),
            password=getpass("Пароль: "),
        ) as connection:
            print(connection)
    except Error as e:
        print(e)
        

    Объект MySQLConnection хранится в переменной connection, которую мы будем использовать для доступа к серверу MySQL. Несколько важных моментов:

    • Все соединения с базой данных оборачивайтев блоки try ... except. Так будет проще перехватить и изучить любые исключения.
    • Не забывайте закрывать соединение после завершения доступа к базе данных. Неиспользуемые открытые соединения приводят к неожиданным ошибкам и проблемам с производительностью. В коде для этого используется диспетчер контекста (with ... as ...).
    • Никогда не следует встраивать учетные данные (имя пользователя и пароль) в строковом виде в скрипт Python. Это плохая практика для развертывания, которая представляет серьезную угрозу безопасности. Приведенный код запрашивает для входа учетные данные. Для этого используется встроенный модуль getpass, чтобы скрыть вводимый пароль. Хотя это лучше, чем жесткое кодирование, но есть и другие, более безопасные способы хранения конфиденциальной информации, например, использование переменных среды.

    Итак, мы установили соединение между нашей программой и сервером MySQL. Теперь нужно либо создать новую базу данных, либо подключиться к существующей.

    Создаем новую базу данных

    Чтобы создать новую базу данных, например, с именем online_movie_rating, нужно выполнить инструкцию SQL:

            CREATE DATABASE online_movie_rating;
        

    Примечание

    MySQL обязывает ставить точку с запятой (;) в конце оператора. Однако MySQL Connector/Python автоматически добавляет точку с запятой в конце каждого запроса.

    Чтобы выполнить SQL-запрос, нам понадобится курсор, который абстрагирует процесс доступа к записям базы данных. MySQL Connector/Python предоставляет соответствующий класс MySQLCursor, экземпляр которого также называется курсором.

    Передадим наш запрос о создании базы данных online_movie_rating:

            try:
        with connect(
            host="localhost",
            user=input("Имя пользователя: "),
            password=getpass("Пароль: "),
        ) as connection:
            create_db_query = "CREATE DATABASE online_movie_rating"
            with connection.cursor() as cursor:
                cursor.execute(create_db_query)
    except Error as e:
        print(e)
        

    Запрос CREATE DATABASE сохраняется в виде строки в переменной create_db_query, а затем передается на выполнение в cursor.execute().

    Если база данных с таким именем уже существует на сервере, мы получим сообщение об ошибке. Используя тот же объект MySQLConnection, что и ранее, выполним запрос SHOW DATABASES, чтобы увидеть все таблицы, хранящиеся в базе данных:

            try:
        with connect(
            host="localhost",
            user=input("Введите имя пользователя: "),
            password=getpass("Введите пароль: "),
        ) as connection:
            show_db_query = "SHOW DATABASES"
            with connection.cursor() as cursor:
                cursor.execute(show_db_query)
                for db in cursor:
                    print(db)
    except Error as e:
        print(e)
        
            Введите имя пользователя:  root
    Введите пароль:  ········
    ('information_schema',)
    ('mysql',)
    ('online_movie_rating',)
    ('performance_schema',)
    ('sys',)
        

    Приведенный код выведет имена всех баз данных, находящихся на нашем сервере MySQL. Команда SHOW DATABASES в нашем примере также вывела базы данных, которые автоматически создаются сервером MySQL и предоставляют доступ к метаданным баз данных и настройкам сервера.

    Подключение к существующей базе данных

    Итак, мы создали базу данных под названием online_movie_rating. Чтобы к ней подключиться, просто дополняем вызов connect() параметром database:

            try:
        with connect(
            host="localhost",
            user=input("Имя пользователя: "),
            password=getpass("Пароль: "),
            database="online_movie_rating",
        ) as connection:
            print(connection)
    except Error as e:
        print(e)
        

    Создание, изменение и удаление таблиц

    В этом разделе мы рассмотрим, как с помощью Python выполнять некоторые базовые запросы: CREATE TABLE, DROP и ALTER.

    Определение схемы базы данных

    Начнем с создания схемы базы данных для рейтинговой системы фильмов. База данных будет состоять из трех таблиц:

    1. movies ― общая информация о фильмах:

    • id
    • title
    • release year
    • genre
    • collection_in_mi

    2. reviewers ― информация о людях, опубликовавших оценки фильмов:

    1. id
    2. first_name
    3. last_name

    3. ratings ― информация об оценках фильмов рецензентами:

    1. movie_id (foreign key)
    2. reviewer_id (foreign key)
    3. rating

    Этих трех таблиц достаточно для целей данного руководства.

    Схема системы рейтинга фильмов

    Схема системы рейтинга фильмов

    Таблицы в базе данных связаны друг с другом: movies и reviewers должны иметь отношение «многие ко многим»: один фильм может быть просмотрен несколькими рецензентами, а один рецензент может рецензировать несколько фильмов. Таблица ratings соединяет таблицу фильмов с таблицей рецензентов.

    Создание таблиц с помощью оператора CREATE TABLE

    Чтобы создать новую таблицу в MySQL, нам нужно использовать оператор CREATE TABLE. Следующий запрос MySQL создаст таблицу movies нашей базы данных online_movie_rating:

            CREATE TABLE movies(
        id INT AUTO_INCREMENT PRIMARY KEY,
        title VARCHAR(100),
        release_year YEAR(4),
        genre VARCHAR(100),
        collection_in_mil INT
    );
        

    Если вы раньше встречались с SQL, вам будет понятен смысл приведенного запроса. У диалекта MySQL есть некоторые отличительные черты. Например, MySQL предлагает широкий выбор типов данных, включая YEAR, INT, BIGINT и так далее. Кроме того, MySQL использует ключевое слово AUTO_INCREMENT, когда значение столбца должно автоматически увеличиваться при вставке новых записей.

    Чтобы создать таблицу, необходимо передать указанный запрос в cursor.execute():

            create_movies_table_query = """
    CREATE TABLE movies(
        id INT AUTO_INCREMENT PRIMARY KEY,
        title VARCHAR(100),
        release_year YEAR(4),
        genre VARCHAR(100),
        collection_in_mil INT
    )
    """
    
    with connection.cursor() as cursor:
        cursor.execute(create_movies_table_query)
        connection.commit()
        

    Обратите внимание на оператор connection.commit(). По умолчанию коннектор MySQL не выполняет автоматическую фиксацию транзакций. В MySQL модификации, упомянутые в транзакции, происходят только тогда, когда мы используем в конце команду COMMIT. Чтобы внести изменения в таблицу, всегда вызывайте этот метод после каждой транзакции.

    Повторим процедуру для таблицы reviewers:

            create_reviewers_table_query = """
    CREATE TABLE reviewers (
        id INT AUTO_INCREMENT PRIMARY KEY,
        first_name VARCHAR(100),
        last_name VARCHAR(100)
    )
    """
    
    with connection.cursor() as cursor:
        cursor.execute(create_reviewers_table_query)
        connection.commit()
        

    Наконец, создадим таблицу ratings:

            create_ratings_table_query = """
    CREATE TABLE ratings (
        movie_id INT,
        reviewer_id INT,
        rating DECIMAL(2,1),
        FOREIGN KEY(movie_id) REFERENCES movies(id),
        FOREIGN KEY(reviewer_id) REFERENCES reviewers(id),
        PRIMARY KEY(movie_id, reviewer_id)
    )
    """
    
    with connection.cursor() as cursor:
        cursor.execute(create_ratings_table_query)
        connection.commit()
        

    Реализация отношений внешнего ключа в MySQL немного отличается и имеет ограничения в сравнении со стандартным SQL. В MySQL и родитель, и потомок внешнего ключа должны использовать один и тот же механизм хранения ― базовый программный компонент, который система управления базами данных использует для выполнения SQL-операций. MySQL предлагает два вида таких механизмов:

    1. Транзакционные механизмы хранения безопасны для транзакций и позволяют откатывать транзакции с помощью простых команд, таких как rollback. К этой категории относятся многие популярные движки MySQL, включая InnoDB и NDB.
    2. Нетранзакционные механизмы хранения для отмены операторов, зафиксированных в базе данных, опираются на ручной код. Это, например MyISAM и MEMORY.

    InnoDB ― самый популярный механизм хранения по умолчанию. Соблюдая ограничения внешнего ключа, он помогает поддерживать целостность данных. Это означает, что любая CRUD-операция с внешним ключом предварительно проверяется на то, что она не приводит к несогласованности между разными таблицами.

    Обратите внимание, что таблица ratings использует столбцы movie_id и reviewer_id, как два внешних ключа, выступающих вместе в качестве первичного ключа. Эта особенность гарантирует, что рецензент не сможет дважды оценить один и тот же фильм.

    Один и тот же курсор можно использовать для нескольких обращений. В этом случае все обращения станут одной атомарной транзакцией. Например, можно выполнить все операторы CREATE TABLE одним курсором, а затем зараз зафиксировать транзакцию:

            with connection.cursor() as cursor:
        cursor.execute(create_movies_table_query)
        cursor.execute(create_reviewers_table_query)
        cursor.execute(create_ratings_table_query)
        connection.commit()
        

    Отображение схемы таблиц с использованием оператора DESCRIBE

    Мы создали три таблицы и можем просмотреть схему, используя оператор DESCRIBE.

    Предполагая, что у вас уже есть объект MySQLConnection в переменной connection, мы можем распечатать результаты, полученные с помощью cursor.fetchall(). Этот метод извлекает все строки из последнего выполненного оператора:

            show_table_query = "DESCRIBE movies"
    with connection.cursor() as cursor:
        cursor.execute(show_table_query)
        # Fetch rows from last executed query
        result = cursor.fetchall()
        for row in result:
            print(row)
        
            ('id', 'int(11)', 'NO', 'PRI', None, 'auto_increment')
    ('title', 'varchar(100)', 'YES', '', None, '')
    ('release_year', 'year(4)', 'YES', '', None, '')
    ('genre', 'varchar(100)', 'YES', '', None, '')
    ('collection_in_mil', 'int(11)', 'YES', '', None, '')
        

    После выполнения приведенного кода мы должны получить таблицу, содержащую информацию о столбцах в таблице movies. Для каждого столбца выводится информация, о типе данных, является ли столбец первичным ключом и т. д.

    Изменение схемы таблицы с помощью оператора ALTER

    Столбец с именем collection_in_mil в таблице movies содержит кассовые сборы фильма в миллионах долларов. Мы можем написать следующую инструкцию MySQL, чтобы изменить тип данных атрибута collection_in_mil с INT на DECIMAL:

            ALTER TABLE movies MODIFY COLUMN collection_in_mil DECIMAL(4,1);
        

    DECIMAL(4,1) указывает на десятичное число, которое может иметь максимум 4 цифры, из которых 1 соответствует разряду десятых, например, 120.1, 3.4, 38.0 и т. д.

            alter_table_query = """
    ALTER TABLE movies
    MODIFY COLUMN collection_in_mil DECIMAL(4,1)
    """
    show_table_query = "DESCRIBE movies"
    with connection.cursor() as cursor:
        cursor.execute(alter_table_query)
        cursor.execute(show_table_query)
        # Получить строки из последнего выполненного запроса
        result = cursor.fetchall()
        print("Схема таблицы movie после внесения изменений:")
        for row in result:
            print(row)
        
            Схема таблицы movie после внесения изменений:
    ('id', 'int(11)', 'NO', 'PRI', None, 'auto_increment')
    ('title', 'varchar(100)', 'YES', '', None, '')
    ('release_year', 'year(4)', 'YES', '', None, '')
    ('genre', 'varchar(100)', 'YES', '', None, '')
    ('collection_in_mil', 'decimal(4,1)', 'YES', '', None, '')
        

    Как показано в выходных данных, атрибут collection_in_mil сменил тип на DECIMAL(4,1). Обратите внимание, что в приведенном выше коде мы дважды вызываем cursor.execute(), но cursor.fetchall() выбирает строки только из последнего выполненного запроса, которым является show_table_query.

    Удаление таблиц с помощью оператора DROP

    Для удаления таблиц служит оператор DROP TABLE. Удаление таблицы ― необратимый процесс. Если вы выполните приведенный ниже код, вам нужно будет снова вызвать запрос CREATE TABLE для таблицы ratings:

            drop_table_query = "DROP TABLE ratings"
    with connection.cursor() as cursor:
        cursor.execute(drop_table_query)
        

    Вставка записей в таблицы

    Заполним таблицы данными. В этом разделе мы рассмотрим два способа вставки записей с помощью MySQL Connector в коде Python.

    Первый метод, .execute(), хорошо работает, когда количество записей невелико. Второй, .executemany() лучше подходит для реальных сценариев.

    Вставка записей с помощью .execute()

    Первый подход использует тот же метод cursor.execute(), который мы применяли до сих пор. Пишем запрос INSERT INTO и передаем в cursor.execute():

            insert_movies_query = """
    INSERT INTO movies (title, release_year, genre, collection_in_mil)
    VALUES
        ("Forrest Gump", 1994, "Drama", 330.2),
        ("3 Idiots", 2009, "Drama", 2.4),
        ("Eternal Sunshine of the Spotless Mind", 2004, "Drama", 34.5),
        ("Good Will Hunting", 1997, "Drama", 138.1),
        ("Skyfall", 2012, "Action", 304.6),
        ("Gladiator", 2000, "Action", 188.7),
        ("Black", 2005, "Drama", 3.0),
        ("Titanic", 1997, "Romance", 659.2),
        ("The Shawshank Redemption", 1994, "Drama",28.4),
        ("Udaan", 2010, "Drama", 1.5),
        ("Home Alone", 1990, "Comedy", 286.9),
        ("Casablanca", 1942, "Romance", 1.0),
        ("Avengers: Endgame", 2019, "Action", 858.8),
        ("Night of the Living Dead", 1968, "Horror", 2.5),
        ("The Godfather", 1972, "Crime", 135.6),
        ("Haider", 2014, "Action", 4.2),
        ("Inception", 2010, "Adventure", 293.7),
        ("Evil", 2003, "Horror", 1.3),
        ("Toy Story 4", 2019, "Animation", 434.9),
        ("Air Force One", 1997, "Drama", 138.1),
        ("The Dark Knight", 2008, "Action",535.4),
        ("Bhaag Milkha Bhaag", 2013, "Sport", 4.1),
        ("The Lion King", 1994, "Animation", 423.6),
        ("Pulp Fiction", 1994, "Crime", 108.8),
        ("Kai Po Che", 2013, "Sport", 6.0),
        ("Beasts of No Nation", 2015, "War", 1.4),
        ("Andadhun", 2018, "Thriller", 2.9),
        ("The Silence of the Lambs", 1991, "Crime", 68.2),
        ("Deadpool", 2016, "Action", 363.6),
        ("Drishyam", 2015, "Mystery", 3.0)
    """
    with connection.cursor() as cursor:
        cursor.execute(insert_movies_query)
        connection.commit()
        

    аблица movies теперь заполнена тридцатью записями. В конце код вызывает connection.commit(). Не забывайте вызывать .commit() после выполнения любых изменений в таблице.

    Вставка записей с помощью .executemany()

    Предыдущий подход годится, когда количество записей мало, и их можно вставить из кода. Но обычно данные хранятся в файле или генерируются другим сценарием. Вот где пригодится .executemany(). Метод принимает два параметра:

    1. Запрос, содержащий заполнители для записей, которые необходимо вставить.
    2. Список записей для вставки.

    Применим подход для заполнения таблицы reviewers:

            insert_reviewers_query = """
    INSERT INTO reviewers
    (first_name, last_name)
    VALUES ( %s, %s )
    """
    reviewers_records = [
        ("Chaitanya", "Baweja"),
        ("Mary", "Cooper"),
        ("John", "Wayne"),
        ("Thomas", "Stoneman"),
        ("Penny", "Hofstadter"),
        ("Mitchell", "Marsh"),
        ("Wyatt", "Skaggs"),
        ("Andre", "Veiga"),
        ("Sheldon", "Cooper"),
        ("Kimbra", "Masters"),
        ("Kat", "Dennings"),
        ("Bruce", "Wayne"),
        ("Domingo", "Cortes"),
        ("Rajesh", "Koothrappali"),
        ("Ben", "Glocker"),
        ("Mahinder", "Dhoni"),
        ("Akbar", "Khan"),
        ("Howard", "Wolowitz"),
        ("Pinkie", "Petit"),
        ("Gurkaran", "Singh"),
        ("Amy", "Farah Fowler"),
        ("Marlon", "Crafford"),
    ]
    with connection.cursor() as cursor:
        cursor.executemany(insert_reviewers_query,
                           reviewers_records)
        connection.commit()
        

    Этот код использует %s в качестве заполнителей для двух строк, которые вставляются в insert_reviewers_query. Заполнители действуют как спецификаторы формата и помогают зарезервировать место для переменной внутри строки.

    Аналогичным образом заполним таблицу ratings:

            insert_ratings_query = """
    INSERT INTO ratings
    (rating, movie_id, reviewer_id)
    VALUES ( %s, %s, %s)
    """
    ratings_records = [
        (6.4, 17, 5), (5.6, 19, 1), (6.3, 22, 14), (5.1, 21, 17),
        (5.0, 5, 5), (6.5, 21, 5), (8.5, 30, 13), (9.7, 6, 4),
        (8.5, 24, 12), (9.9, 14, 9), (8.7, 26, 14), (9.9, 6, 10),
        (5.1, 30, 6), (5.4, 18, 16), (6.2, 6, 20), (7.3, 21, 19),
        (8.1, 17, 18), (5.0, 7, 2), (9.8, 23, 3), (8.0, 22, 9),
        (8.5, 11, 13), (5.0, 5, 11), (5.7, 8, 2), (7.6, 25, 19),
        (5.2, 18, 15), (9.7, 13, 3), (5.8, 18, 8), (5.8, 30, 15),
        (8.4, 21, 18), (6.2, 23, 16), (7.0, 10, 18), (9.5, 30, 20),
        (8.9, 3, 19), (6.4, 12, 2), (7.8, 12, 22), (9.9, 15, 13),
        (7.5, 20, 17), (9.0, 25, 6), (8.5, 23, 2), (5.3, 30, 17),
        (6.4, 5, 10), (8.1, 5, 21), (5.7, 22, 1), (6.3, 28, 4),
        (9.8, 13, 1)
    ]
    with connection.cursor() as cursor:
        cursor.executemany(insert_ratings_query, ratings_records)
        connection.commit()
        

    Теперь все три таблицы заполнены данными. Следующий шаг ― разобраться, как с этой базой данных взаимодействовать.

    Чтение записей из базы данных

    До сих пор мы только создавали элементы базы данных. Пришло время выполнить несколько запросов и найти интересующие нас свойства. В этом разделе мы узнаем, как читать записи из таблиц базы данных с помощью оператора SELECT.

    Чтение записей с помощью оператора SELECT

    Чтобы получить записи, необходимо отправить в cursor.execute() запрос SELECT и вернуть результат с помощью cursor.fetchall():

            select_movies_query = "SELECT * FROM movies LIMIT 5"
    with connection.cursor() as cursor:
        cursor.execute(select_movies_query)
        result = cursor.fetchall()
        for row in result:
            print(row)
        
            (1, 'Forrest Gump', 1994, 'Drama', Decimal('330.2'))
    (2, '3 Idiots', 2009, 'Drama', Decimal('2.4'))
    (3, 'Eternal Sunshine of the Spotless Mind', 2004, 'Drama', Decimal('34.5'))
    (4, 'Good Will Hunting', 1997, 'Drama', Decimal('138.1'))
    (5, 'Skyfall', 2012, 'Action', Decimal('304.6'))
        

    Переменная result содержит записи, возвращенные с помощью .fetchall(). Это список кортежей, представляющих отдельные записи таблицы.

    В приведенном запросе мы используем ключевое слово LIMIT, чтобы ограничить количество строк, получаемых от оператора SELECT. Разработчики часто используют LIMIT для разбивки выдачи на страницы при обработке больших объемов данных.

    В MySQL оператору LIMIT можно передать два неотрицательных числовых аргумента:

            SELECT * FROM movies LIMIT 2,5;
        

    При использовании двух числовых аргументов первый указывает смещение, равное в данном примере 2, а второй ограничивает количество возвращаемых строк до 5. То есть запрос из примера вернет строки с 3 по 7.

            select_movies_query = "SELECT title, release_year FROM movies LIMIT 2, 5"
    with connection.cursor() as cursor:
        cursor.execute(select_movies_query)
        for row in cursor.fetchall():
            print(row)
        
            ('Eternal Sunshine of the Spotless Mind', 2004)
    ('Good Will Hunting', 1997)
    ('Skyfall', 2012)
    ('Gladiator', 2000)
    ('Black', 2005)
        

    Фильтрация результатов с помощью WHERE

    Записи таблицы также можно фильтровать, используя WHERE. Чтобы получить все фильмы с кассовыми сборами свыше 300 млн долларов, выполним следующий запрос:

            select_movies_query = """
    SELECT title, collection_in_mil
    FROM movies
    WHERE collection_in_mil > 300
    ORDER BY collection_in_mil DESC
    """
    with connection.cursor() as cursor:
        cursor.execute(select_movies_query)
        for movie in cursor.fetchall():
            print(movie)
        
            ('Avengers: Endgame', Decimal('858.8'))
    ('Titanic', Decimal('659.2'))
    ('The Dark Knight', Decimal('535.4'))
    ('Toy Story 4', Decimal('434.9'))
    ('The Lion King', Decimal('423.6'))
    ('Deadpool', Decimal('363.6'))
    ('Forrest Gump', Decimal('330.2'))
    ('Skyfall', Decimal('304.6'))
    
        

    Словосочетание ORDER BY в запросе позволяет отсортировать сборы от самого высокого до самого низкого.

    MySQL предоставляет множество операций форматирования строк, таких как CONCAT для объединения строк. Например, названия фильмов, чтобы избежать путаницы, обычно отображается вместе с годом выпуска. Получим названия пяти самых прибыльных фильмов вместе с датами их выхода в прокат:

            select_movies_query = """
    SELECT CONCAT(title, " (", release_year, ")"),
          collection_in_mil
    FROM movies
    ORDER BY collection_in_mil DESC
    LIMIT 5
    """
    with connection.cursor() as cursor:
        cursor.execute(select_movies_query)
        for movie in cursor.fetchall():
            print(movie)
        
            ('Avengers: Endgame (2019)', Decimal('858.8'))
    ('Titanic (1997)', Decimal('659.2'))
    ('The Dark Knight (2008)', Decimal('535.4'))
    ('Toy Story 4 (2019)', Decimal('434.9'))
    ('The Lion King (1994)', Decimal('423.6'))
    
        

    Если вы не хотите использовать LIMIT и вам не нужно получать все записи, можно использовать методы курсора .fetchone() и .fetchmany():

    • .fetchone() извлекает следующую строку результата в виде кортежа, либо None, если доступных строк больше нет.
    • .fetchmany() извлекает следующий набор строк из результата в виде списка кортежей. Для этого ему передается аргумент, по умолчанию равный 1. Если доступных строк больше нет, метод возвращает пустой список.

    Снова извлечем названия пяти самых кассовых фильмов с указанием года выпуска, но на этот раз используя .fetchmany():

            select_movies_query = """
    SELECT CONCAT(title, " (", release_year, ")"),
          collection_in_mil
    FROM movies
    ORDER BY collection_in_mil DESC
    """
    with connection.cursor() as cursor:
        cursor.execute(select_movies_query)
        for movie in cursor.fetchmany(size=5):
            print(movie)
        cursor.fetchall()
        
            ('Avengers: Endgame (2019)', Decimal('858.8'))
    ('Titanic (1997)', Decimal('659.2'))
    ('The Dark Knight (2008)', Decimal('535.4'))
    ('Toy Story 4 (2019)', Decimal('434.9'))
    ('The Lion King (1994)', Decimal('423.6'))
    
        

    Вы могли заметить дополнительный вызов cursor.fetchall(). Мы делаем это, чтобы очистить все оставшиеся результаты, которые не были прочитаны .fetchmany().

    Перед выполнением любых других операторов в том же соединении необходимо очистить все непрочитанные результаты. В противном случае вызывается исключение InternalError.

    Обработка нескольких таблиц с помощью оператора JOIN

    Чтобы узнать названия пяти фильмов с самым высоким рейтингом, выполним следующий запрос:

            select_movies_query = """
    SELECT title, AVG(rating) as average_rating
    FROM ratings
    INNER JOIN movies
        ON movies.id = ratings.movie_id
    GROUP BY movie_id
    ORDER BY average_rating DESC
    LIMIT 5
    """
    with connection.cursor() as cursor:
        cursor.execute(select_movies_query)
        for movie in cursor.fetchall():
            print(movie)
        
            ('Night of the Living Dead', Decimal('9.90000'))
    ('The Godfather', Decimal('9.90000'))
    ('Avengers: Endgame', Decimal('9.75000'))
    ('Eternal Sunshine of the Spotless Mind', Decimal('8.90000'))
    ('Beasts of No Nation', Decimal('8.70000'))
    
        

    Найти имя рецензента, давшего наибольшее количество оценок, можно так:

            select_movies_query = """
    SELECT CONCAT(first_name, " ", last_name), COUNT(*) as num
    FROM reviewers
    INNER JOIN ratings
        ON reviewers.id = ratings.reviewer_id
    GROUP BY reviewer_id
    ORDER BY num DESC
    LIMIT 1
    """
    with connection.cursor() as cursor:
        cursor.execute(select_movies_query)
        for movie in cursor.fetchall():
            print(movie)
    
        
            ('Mary Cooper', 4)
    
        

    Как видим, больше всего рецензий написала Mary Cooper.

    Не имеет значения, насколько сложен запрос ― в конечном счете он обрабатывается сервером MySQL. Процесс выполнения запроса всегда остается прежним: передаем запрос в cursor.execute(), получаем результаты с помощью .fetchall().

    Обновление и удаление записей из базы данных

    В этом разделе мы обновим и удалим часть записей. Необходимые строки мы выберем с помощью ключевого слова WHERE.

    Команда UPDATE

    Представим, что рецензент Amy Farah Fowler вышла замуж за Sheldon Cooper. Она сменила фамилию на Cooper, и нам необходимо обновить базу данных. Для обновления записей в MySQL используется оператор UPDATE:

            update_query = """
    UPDATE
        reviewers
    SET
        last_name = "Cooper"
    WHERE
        first_name = "Amy"
    """
    with connection.cursor() as cursor:
        cursor.execute(update_query)
        connection.commit()
        

    Код передает запрос на обновление в cursor.execute(), а .commit() вносит необходимые изменения в таблицу reviewers.

    Представим, что мы хотим дать возможность рецензентам изменять оценки. Программа должна знать movie_id, reviewer_id и новый rating. Пример на SQL:

            UPDATE
        ratings
    SET
        rating = 5.0
    WHERE
        movie_id = 18 AND reviewer_id = 15;
    
    SELECT *
    FROM ratings
    WHERE
        movie_id = 18 AND reviewer_id = 15;
        

    Указанные запросы сначала обновляют рейтинг, а затем выведут обновленный. Напишем скрипт на Python, который позволит корректировать оценки:

    modify_ratings.py
            from getpass import getpass
    from mysql.connector import connect, Error
    
    movie_id = input("Enter movie id: ")
    reviewer_id = input("Enter reviewer id: ")
    new_rating = input("Enter new rating: ")
    update_query = """
    UPDATE
        ratings
    SET
        rating = "%s"
    WHERE
        movie_id = "%s" AND reviewer_id = "%s";
    
    SELECT *
    FROM ratings
    WHERE
        movie_id = "%s" AND reviewer_id = "%s"
    """ % (
        new_rating,
        movie_id,
        reviewer_id,
        movie_id,
        reviewer_id,
    )
    
    try:
        with connect(
            host="localhost",
            user=input("Enter username: "),
            password=getpass("Enter password: "),
            database="online_movie_rating",
        ) as connection:
            with connection.cursor() as cursor:
                for result in cursor.execute(update_query, multi=True):
                    if result.with_rows:
                        print(result.fetchall())
                connection.commit()
    except Error as e:
        print(e)
        
            Enter movie id:  18
    Enter reviewer id:  15
    Enter new rating:  5
    Enter username:  root
    Enter password:  ········
    
        
            [(18, 15, Decimal('5.0'))]
    
        

    Чтобы передать несколько запросов одному курсору, мы присваиваем аргументу multi значение True. В этом случае cursor.execute() возвращает итератор. Каждый элемент в итераторе соответствует объекту курсора, который выполняет инструкцию, переданную в запросе. Приведенный код запускает на этом итераторе цикл for, вызывая .fetchall() для каждого объекта курсора.

    Если для операции не был получен набор результатов, то .fetchall() вызывает исключение. Чтобы избежать этой ошибки, в приведенном коде мы используем свойство cursor.with_rows, которое указывает, создавала ли строки последняя выполненная операция.

    Хотя этот код решает поставленную задачу, инструкция WHERE в текущем виде является заманчивой целью для хакеров. Она уязвима для атаки с использованием SQL-инъекции, позволяющей злоумышленникам повредить базу данных или использовать ее не по назначению.

    Например, если пользователь отправляет movie_id = 18, reviewer_id = 15 и rating = 5.0 в качестве входных данных, то результат будет выглядеть так:

            $ python modify_ratings.py
    Enter movie id: 18
    Enter reviewer id: 15
    Enter new rating: 5.0
    Enter username: <user_name>
    Enter password:
    [(18, 15, Decimal('5.0'))]
        

    Оценка для movie_id = 18 и reviewer_id = 15 изменилась на 5.0. Но если бы вы были хакером, вы могли отправить на вход скрытую команду:

            $ python modify_ratings.py
    Enter movie id: 18
    Enter reviewer id: 15"; UPDATE reviewers SET last_name = "A
    Enter new rating: 5.0
    Enter username: <user_name>
    Enter password:
    [(18, 15, Decimal('5.0'))]
        

    И снова выходные данные показывают, что указанный рейтинг был изменен на 5.0. Что изменилось?

    Хакер перехватил запрос на обновление данных. Запрос на обновление, изменит last_name всех записей в таблице рецензентов "A":

            >>> select_query = """
    ... SELECT first_name, last_name
    ... FROM reviewers
    ... """
    >>> with connection.cursor() as cursor:
    ...     cursor.execute(select_query)
    ...     for reviewer in cursor.fetchall():
    ...         print(reviewer)
    ...
    ('Chaitanya', 'A')
    ('Mary', 'A')
    ('John', 'A')
    ('Thomas', 'A')
    ('Penny', 'A')
    ('Mitchell', 'A')
    ('Wyatt', 'A')
    ('Andre', 'A')
    ('Sheldon', 'A')
    ('Kimbra', 'A')
    ('Kat', 'A')
    ('Bruce', 'A')
    ('Domingo', 'A')
    ('Rajesh', 'A')
    ('Ben', 'A')
    ('Mahinder', 'A')
    ('Akbar', 'A')
    ('Howard', 'A')
    ('Pinkie', 'A')
    ('Gurkaran', 'A')
    ('Amy', 'A')
    ('Marlon', 'A')
        

    Приведенный код отображает first_name и last_name для всех записей в таблице проверяющих. Атака с использованием SQL-инъекции повредила эту таблицу, изменив last_name всех записей на «A».

    Есть быстрое решение для предотвращения таких атак. Не добавляйте значения запроса, предоставленные пользователем, напрямую в строку запроса. Лучше обнолять сценарий с отправкой значений запроса в качестве аргументов в .execute():

    modify_ratings.py
            from getpass import getpass
    from mysql.connector import connect, Error
    
    movie_id = input("Enter movie id: ")
    reviewer_id = input("Enter reviewer id: ")
    new_rating = input("Enter new rating: ")
    update_query = """
    UPDATE
        ratings
    SET
        rating = %s
    WHERE
        movie_id = %s AND reviewer_id = %s;
    
    SELECT *
    FROM ratings
    WHERE
        movie_id = %s AND reviewer_id = %s
    """
    val_tuple = (
        new_rating,
        movie_id,
        reviewer_id,
        movie_id,
        reviewer_id,
    )
    
    try:
        with connect(
            host="localhost",
            user=input("Enter username: "),
            password=getpass("Enter password: "),
            database="online_movie_rating",
        ) as connection:
            with connection.cursor() as cursor:
                for result in cursor.execute(update_query, val_tuple, multi=True):
                    if result.with_rows:
                        print(result.fetchall())
                connection.commit()
    except Error as e:
        print(e)
        

    Обратите внимание, что плейсхолдеры %s больше не заключены в строковые кавычки. cursor.execute() проверяет, что значения в кортеже, полученном в качестве аргумента, имеют требуемый тип данных. Если пользователь попытается ввести какие-то проблемные символы, код вызовет исключение:

            $ python modify_ratings.py
    Enter movie id: 18
    Enter reviewer id: 15"; UPDATE reviewers SET last_name = "A
    Enter new rating: 5.0
    Enter username: <user_name>
    Enter password:
    1292 (22007): Truncated incorrect DOUBLE value: '15";
    UPDATE reviewers SET last_name = "A'
        

    Такой подход стоит использовать всегда, когда вы включаете в запрос пользовательский ввод. Не поленитесь узнать и про другие способы предотвращения атак с использованием SQL-инъекций.

    Удаление записей: команда DELETE¶

    Процедура удаления записей очень похожа на их обновление. Поскольку DELETE является необратимой операцией, мы рекомендуем сначала запускать запрос SELECT с тем же фильтром, чтобы убедиться, что вы удаляете нужные записи. Например, чтобы удалить все оценки фильмов, данные reviewer_id = 2, мы можем сначала запустить соответствующий запрос SELECT:

            select_movies_query = """
    SELECT reviewer_id, movie_id FROM ratings
    WHERE reviewer_id = 2
    """
    with connection.cursor() as cursor:
        cursor.execute(select_movies_query)
        for movie in cursor.fetchall():
            print(movie)
        
            (2, 7)
    (2, 8)
    (2, 12)
    (2, 23)
    
        

    Приведенный фрагмент кода выводит пары reviewer_id и movie_id для записей в таблице оценок, для которых reviewer_id = 2. Убедившись, что это те записи, которые нужно удалить, выполним запрос DELETE с тем же фильтром:

            delete_query = "DELETE FROM ratings WHERE reviewer_id = 2"
    with connection.cursor() as cursor:
        cursor.execute(delete_query)
        connection.commit()
        

    Другие способы соединения Python и MySQL

    В этом руководстве мы познакомились с MySQL Connector/Python, который является официально рекомендуемым средством взаимодействия с базой данных MySQL из приложения Python. Вот еще пара популярных коннекторов:

    • mysqlclient ― библиотека, которая является конкурентом официального коннектора и активно дополняется новыми функциями. Поскольку ядро библиотеки написано на C, она имеет лучшую производительность, чем официальный коннектор на чистом Python. Большой недостаток состоит в том, что mysqlclient довольно сложно настроить и установить, особенно в Windows.
    • MySQLdb ― устаревшее программное обеспечение, которое до сих пор используется в коммерческих приложениях. Написано на C и быстрее MySQL Connector/Python, но доступно только для Python 2.

    Эти драйверы действуют, как интерфейсы между вашей программой и базой данных MySQL. Фактически вы просто отправляете через них свои SQL-запросы. Но многие разработчики предпочитают использовать для управления данными не SQL-запросы, а объектно-ориентированную парадигму.

    Объектно-реляционное отображение (ORM) — метод, который позволяет запрашивать и управлять данными из базы данных напрямую, используя объектно-ориентированный язык. ORM-библиотека инкапсулирует код, необходимый для управления данными, освобождая разработчиков от необходимости использовать SQL-запросы. Вот самые популярные ORM-библиотеки для связки Python и SQL:

    • SQLAlchemy ― это ORM, которая упрощает взаимодействие между Python и другими базами данных SQL. Вы можете создавать разные движки для разных баз данных, таких как MySQL, PostgreSQL, SQLite и т. д. Читайте наш туториал по SQLAlchemy.
    • peewee ― легкая и быстрая ORM-библиотека с простой настройкой, что очень полезно, когда ваше взаимодействие с базой данных ограничивается извлечением нескольких записей. Если нужно скопировать отдельные записи из базы данных MySQL в csv-файл, то лучший выбор ― peewee.
    • Django ORM ― одна из самых мощных составляющих веб-фреймворка Django, позволяющая простым образом взаимодействовать с различными базами данных SQLite, PostgreSQL и MySQL. Многие приложения на основе Django используют Django ORM для моделирования данных и базовых запросов, однако для более сложных задач разработчики обычно используют SQLAlchemy.

    Заключение

    В этом руководстве мы познакомились с применением MySQL Connector/Python для интеграции базы данных MySQL в ваше приложение Python. Мы также разработали тестовый образец базы данных MySQL и повзаимодействовали с ней непосредственно из Python-кода. Дополнительные сведения можно найти в официальной документации.

    Python имеет коннекторы и для других СУБД, таких как MongoDB и PostgreSQL. Будем рады узнать, какие еще материалы по Python и базам данных вам были бы интересны.

    Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии
  • Отключить режим гибернации windows 10 cmd
  • Не четкие буквы в windows 10
  • Patch для программ windows
  • Ноутбук завис на перезагрузке что делать windows 10
  • Dual audio bluetooth windows