Краткое руководство. Использование Python для подключения и запроса данных в База данных Azure для MySQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для MySQL — отдельный сервер

Важно!

База данных Azure для MySQL один сервер находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить обновление до База данных Azure для MySQL гибкого сервера. Дополнительные сведения о миграции на гибкий сервер База данных Azure для MySQL см. в статье "Что происходит с одним сервером База данных Azure для MySQL?"

Из этого краткого руководства вы узнаете, как подключиться к Базе данных Azure для MySQL с использованием Python. Также вы узнаете, как использовать инструкции SQL для запроса, вставки, обновления и удаления данных в базе данных на платформах Windows, Mac и Ubuntu Linux.

Необходимые компоненты

Для целей этого краткого руководства понадобится:

Установка Python и соединителя MySQL

Установите Python и соединитель MySQL для Python на компьютере с помощью приведенных ниже шагов.

Примечание.

В этом кратком руководстве используется руководство для разработчика соединителя MySQL или Python.

  1. Загрузите и установите Python 3.7 или выше для вашей ОС. Не забудьте добавить Python в PATH, потому что это нужно для соединителя MySQL.

  2. Откройте командную строку или оболочку bash и проверьте версию Python, запустив python -V с помощью коммутатора V прописными буквами.

  3. Установщик пакетов pip включено в последние версии Python. Обновите pip до последней версии, запустив pip install -U pip.

    Если pip не установлен, можно скачать и установить его с get-pip.py. Дополнительные сведения см. в разделе Установка.

  4. Используйте pip чтоб установить соединитель MySQL для Python и его зависимости.

    pip install mysql-connector-python
    

Получение сведений о подключении

Получите сведения, необходимые для подключения к базе данных Azure для MySQL с портала Azure. Вам потребуется имя сервера, имя базы данных и учетные данные для входа.

  1. Войдите на портал Azure.

  2. На панели поиска портала найдите и выберите базу данных Azure для сервера MySQL, которую вы создали, например, mydemoserver.

    Azure Database for MySQL server name

  3. Запишите имя сервера и имя для входа администратора сервера со страницы сервера Обзор. Если вы забыли свой пароль, можно также сбросить пароль с помощью этой страницы.

    Azure Database for MySQL server name 2

Выполнение примеров кода Python

Для каждого примера кода в этой статье сделайте следующее:

  1. Создайте файл в текстовом редакторе.

  2. Добавьте пример кода в файл. В коде замените заполнители <mydemoserver>, <myadmin>, <mypassword>, и заполнители <mydatabase> значениями для сервера MySQL и базы данных.

  3. Протокол SSL включен по умолчанию на серверах Базы данных Azure для MySQL. Для подключения из локальной среды может потребоваться скачать SSL-сертификат DigiCertGlobalRootG2. Замените значение ssl_ca в коде на путь к этому файлу на компьютере.

  4. Сохраните файл в папку проекта с расширением .ру, например С:\pythonmysql\createtable.py или /home/username/pythonmysql/createtable.py.

  5. Чтобы запустить код, откройте командную строку или оболочку bash и измените каталог в папке проекта, например cd pythonmysql. Введите команду python за которой следует имя файла, например python createtable.py, и нажмите клавишу ВВОД.

    Примечание.

    В Windows, если файл python.exe не найден, может потребоваться добавить путь Python в переменную среды PATH или указать полный путь к python.exe, например C:\python27\python.exe createtable.py.

Шаг 1. Создание таблицы и вставка данных

Используйте следующий код для подключения к серверу и базе данных, создания таблицы и загрузки данных с помощью инструкции SQL INSERT. Код импортирует библиотеку mysql.connector и использует следующие методы:

  • connect() используется для подключения Базы данных Azure для MySQL с помощью аргументов из коллекции конфигураций;
  • cursor.execute() выполняет запрос SQL к базе данных MySQL;
  • cursor.close() используется при завершении работы с курсором;
  • mysqli_close используется, чтобы закрыть подключение.
import mysql.connector
from mysql.connector import errorcode

# Obtain connection string information from the portal

config = {
  'host':'<mydemoserver>.mysql.database.azure.com',
  'user':'<myadmin>@<mydemoserver>',
  'password':'<mypassword>',
  'database':'<mydatabase>',
  'client_flags': [mysql.connector.ClientFlag.SSL],
  'ssl_ca': '<path-to-SSL-cert>/DigiCertGlobalRootG2.crt.pem'
}

# Construct connection string

try:
   conn = mysql.connector.connect(**config)
   print("Connection established")
except mysql.connector.Error as err:
  if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
    print("Something is wrong with the user name or password")
  elif err.errno == errorcode.ER_BAD_DB_ERROR:
    print("Database does not exist")
  else:
    print(err)
else:
  cursor = conn.cursor()

  # Drop previous table of same name if one exists
  cursor.execute("DROP TABLE IF EXISTS inventory;")
  print("Finished dropping table (if existed).")

  # Create table
  cursor.execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
  print("Finished creating table.")

  # Insert some data into table
  cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("banana", 150))
  print("Inserted",cursor.rowcount,"row(s) of data.")
  cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("orange", 154))
  print("Inserted",cursor.rowcount,"row(s) of data.")
  cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("apple", 100))
  print("Inserted",cursor.rowcount,"row(s) of data.")

  # Cleanup
  conn.commit()
  cursor.close()
  conn.close()
  print("Done.")

Шаг 2. Чтение данных

Используйте указанный ниже код с инструкцией SQL SELECT для подключения и чтения данных. Код импортирует библиотеку mysql.connector и использует метод cursor.execute() для выполнения запроса SQL к базе данных MySQL.

Код считывает строки данных с помощью метода fetchall(), сохраняет набор результатов в строке коллекции и использует итератор for для циклического перемещения по строкам.

import mysql.connector
from mysql.connector import errorcode

# Obtain connection string information from the portal

config = {
  'host':'<mydemoserver>.mysql.database.azure.com',
  'user':'<myadmin>@<mydemoserver>',
  'password':'<mypassword>',
  'database':'<mydatabase>',
  'client_flags': [mysql.connector.ClientFlag.SSL],
  'ssl_ca': '<path-to-SSL-cert>/DigiCertGlobalRootG2.crt.pem'
}

# Construct connection string

try:
   conn = mysql.connector.connect(**config)
   print("Connection established")
except mysql.connector.Error as err:
  if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
    print("Something is wrong with the user name or password")
  elif err.errno == errorcode.ER_BAD_DB_ERROR:
    print("Database does not exist")
  else:
    print(err)
else:
  cursor = conn.cursor()

  # Read data
  cursor.execute("SELECT * FROM inventory;")
  rows = cursor.fetchall()
  print("Read",cursor.rowcount,"row(s) of data.")

  # Print all rows
  for row in rows:
  	print("Data row = (%s, %s, %s)" %(str(row[0]), str(row[1]), str(row[2])))

  # Cleanup
  conn.commit()
  cursor.close()
  conn.close()
  print("Done.")

Шаг 3. Обновление данных

Используйте указанный ниже код с инструкцией SQL UPDATE для подключения и обновления данных. Код импортирует библиотеку mysql.connector и использует метод cursor.execute() для выполнения запроса SQL к базе данных MySQL.

import mysql.connector
from mysql.connector import errorcode

# Obtain connection string information from the portal

config = {
  'host':'<mydemoserver>.mysql.database.azure.com',
  'user':'<myadmin>@<mydemoserver>',
  'password':'<mypassword>',
  'database':'<mydatabase>',
  'client_flags': [mysql.connector.ClientFlag.SSL],
  'ssl_ca': '<path-to-SSL-cert>/DigiCertGlobalRootG2.crt.pem'
}

# Construct connection string

try:
   conn = mysql.connector.connect(**config)
   print("Connection established")
except mysql.connector.Error as err:
  if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
    print("Something is wrong with the user name or password")
  elif err.errno == errorcode.ER_BAD_DB_ERROR:
    print("Database does not exist")
  else:
    print(err)
else:
  cursor = conn.cursor()

  # Update a data row in the table
  cursor.execute("UPDATE inventory SET quantity = %s WHERE name = %s;", (300, "apple"))
  print("Updated",cursor.rowcount,"row(s) of data.")

  # Cleanup
  conn.commit()
  cursor.close()
  conn.close()
  print("Done.")

Шаг 4. Удаление данных

Используйте указанный ниже код с инструкцией SQL DELETE для подключения и удаления данных. Код импортирует библиотеку mysql.connector и использует метод cursor.execute() для выполнения запроса SQL к базе данных MySQL.

import mysql.connector
from mysql.connector import errorcode

# Obtain connection string information from the portal

config = {
  'host':'<mydemoserver>.mysql.database.azure.com',
  'user':'<myadmin>@<mydemoserver>',
  'password':'<mypassword>',
  'database':'<mydatabase>',
  'client_flags': [mysql.connector.ClientFlag.SSL],
  'ssl_ca': '<path-to-SSL-cert>/DigiCertGlobalRootG2.crt.pem'
}

# Construct connection string

try:
   conn = mysql.connector.connect(**config)
   print("Connection established")
except mysql.connector.Error as err:
  if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
    print("Something is wrong with the user name or password")
  elif err.errno == errorcode.ER_BAD_DB_ERROR:
    print("Database does not exist")
  else:
    print(err)
else:
  cursor = conn.cursor()

  # Delete a data row in the table
  cursor.execute("DELETE FROM inventory WHERE name=%(param1)s;", {'param1':"orange"})
  print("Deleted",cursor.rowcount,"row(s) of data.")
  
  # Cleanup
  conn.commit()
  cursor.close()
  conn.close()
  print("Done.")  

Очистка ресурсов

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

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

Следующие шаги