Spec-Zone.ru › MySQL Connectors 1.0

5.1 Подключение к MySQL с помощью Connector/Python

Конструктор connect() создаёт подключение к серверу MySQL и возвращает объект MySQLConnection.

Следующий пример демонстрирует подключение к серверу MySQL:

import mysql.connector

cnx = mysql.connector.connect(user='scott', password='password',
                              host='127.0.0.1',
                              database='employees')
cnx.close()

Раздел 7.1, «Аргументы подключения Connector/Python» описывает разрешённые аргументы подключения.

Также возможно создавать объекты подключения, используя класс connection.MySQLConnection():

from mysql.connector import (connection)

cnx = connection.MySQLConnection(user='scott', password='password',
                                 host='127.0.0.1',
                                 database='employees')
cnx.close()

Оба формата (использование конструктора connect() или класса напрямую) являются допустимыми и функционально эквивалентными, но использование connect() предпочтительно и используется в большинстве примеров данного руководства.

Для обработки ошибок подключения используйте оператор try и перехватывайте все ошибки, используя исключение errors.Error:

import mysql.connector
from mysql.connector import errorcode

try:
  cnx = mysql.connector.connect(user='scott',
                                database='employ')
except mysql.connector.Error as err:
  if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
    print("Something is wrong with your user name or password")
  elif err.errno == errorcode.ER_BAD_DB_ERROR:
    print("Database does not exist")
  else:
    print(err)
else:
  cnx.close()

Другим вариантом является определение аргументов подключения в словаре и использование оператора **:

import mysql.connector

config = {
  'user': 'scott',
  'password': 'password',
  'host': '127.0.0.1',
  'database': 'employees',
  'raise_on_warnings': True
}

cnx = mysql.connector.connect(**config)

cnx.close()

Определение опций логгера, процедура повторного подключения и определение метода подключения с именем connect_to_mysql:

import logging
import time
import mysql.connector

# Set up logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")

# Log to console
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger.addHandler(handler)

# Also log to a file
file_handler = logging.FileHandler("cpy-errors.log")
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

def connect_to_mysql(config, attempts=3, delay=2):
    attempt = 1
    # Implement a reconnection routine
    while attempt < attempts + 1:
        try:
            return mysql.connector.connect(**config)
        except (mysql.connector.Error, IOError) as err:
            if (attempts is attempt):
                # Attempts to reconnect failed; returning None
                logger.info("Failed to connect, exiting without a connection: %s", err)
                return None
            logger.info(
                "Connection failed: %s. Retrying (%d/%d)...",
                err,
                attempt,
                attempts-1,
            )
            # progressive reconnect delay
            time.sleep(delay ** attempt)
            attempt += 1
    return None

Подключение и использование базы данных Sakila с помощью вышеупомянутой процедуры, предполагая, что она определена в файле с именем myconnection.py:

from myconnection import connect_to_mysql

config = {
    "host": "127.0.0.1",
    "user": "user",
    "password": "pass",
    "database": "sakila",
}

cnx = connect_to_mysql(config, attempts=3)

if cnx and cnx.is_connected():

    with cnx.cursor() as cursor:

        result = cursor.execute("SELECT * FROM actor LIMIT 5")

        rows = cursor.fetchall()

        for rows in rows:

            print(rows)

    cnx.close()

else:

    print("Could not connect")

Использование расширения Connector/Python Python или C

Connector/Python предлагает две реализации: чистый интерфейс Python и расширение C, использующее библиотеку MySQL C-клиента (см. Главу 8, Расширение Connector/Python C). Это можно настроить во время выполнения, используя аргумент подключения use_pure. По умолчанию, начиная с MySQL 8, это False, что означает использование расширения C. Если расширение C недоступно в системе, то use_pure по умолчанию равно True. Установка use_pure=False заставляет подключение использовать расширение C, если ваша установка Connector/Python его содержит, а use_pure=True до False означает использование реализации Python, если она доступна.

Примечание

Опция use_pure и расширение C были добавлены в Connector/Python 2.1.1.

Следующий пример показывает, как установить use_pure в значение False.

import mysql.connector

cnx = mysql.connector.connect(user='scott', password='password',
                              host='127.0.0.1',
                              database='employees',
                              use_pure=False)
cnx.close()

Также возможно напрямую использовать расширение C, импортировав модуль _mysql_connector вместо модуля mysql.connector. Более подробная информация содержится в разделе 8.2, «Модуль расширения _mysql_connector C».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-python-en/connector-python-example-connecting.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API