Как записать данные в mysql базу при помощи python?
Для работы с mysql базой данных, нужно установить специальный пакет mysqldb
В linux для этого можно использовать команду
1 |
sudo apt-get install python-mysqldb |
В прошлых статьях я рассказывал, как получить данные через api hh.ru и посчитать среднюю зарплату интернет маркетолога, а также рассказывал как настроить автоматическое выполнение этого скрипта по расписанию при помощи cron.
У нас есть скрипт, который получает данные о зарплате интернет маркетолога и считает среднюю
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import requests x=[] all_zp = 0 all_n = 0 for i in range(5): url = 'https://api.hh.ru/vacancies' par = {'text': 'интернет маркетолог','per_page':'10', 'page':i} r = requests.get(url, params=par) e=r.json() x.append(e) for j in x: y = j['items'] #объявляем переменную n для подсчета, количества итераций цикла перебирающего зарплаты в вакансиях n=0 #объявляем переменную sum_zp для подсчета, суммы зарплат в вакансиях sum_zp=0 #цикл, переберает объекты, т.е перебирает вакансии for i in y: # проверяем есть ли значения в словаре salary. Т.е проверяем есть ли в вакансии данные по зарплате if i['salary'] !=None: #записываем значение в переменную s s=i['salary'] # проверяем есть ли значения по ключу акщь. Т.е проверяем есть ли в вакансии данные по минимальной зп if s['from'] !=None: # считаем количество обработанных вакансий в которых указана минимальная ЗП n+=1 #получаем минимальную ЗП по ключу from s['from'] #print (s['from']) #считаем сумму ЗП по вакансиям sum_zp +=s['from'] #добавляем сумму зп по итерации цикла all_zp +=sum_zp #добавляем сумму n по итерации цикла all_n +=n #считаем среднюю ЗП av_zp=all_zp/all_n av_zp=str(av_zp) |
Сегодня мы доработаем этот скрипт. Будем сохранять результат работы скрипта в БД ,mysql.
Я заранее создал простейшую БД назвал её py и создал таблицу zp
Теперь разберем, как будет осуществляться работа с этой базой данных на Python. Соединяемся с БД, создаем курсор (это объект для работы с БД), делаем нужные запросы, применяем внесенные изменения, прекращаем соединение с базой.
Первым делом мы должны импортировать библиотеку для работы с БД. Для этого в начале нашего кода добавляем строку импорта библиотеки mysqldb
1 |
import MySQLdb |
А в конце скрипта добавляем следующий код для записи результатов работы скрипта в БД
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#ниже блок кода для работы с базой #создаем подключение к БД db = MySQLdb.connect(host="localhost", user="vash_user", passwd="vash_pass", db="py", charset='utf8') #используя метод cursor() получаем объект для работы с базой cursor = db.cursor() #формируем sql запрос на запись sql = """INSERT INTO zp(zp) VALUES ('%(zarplata)s') """%{"zarplata":av_zp} # исполняем SQL-запрос cursor.execute(sql) # применяем изменения к базе данных db.commit() |
В итоге получаем следующий код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import requests import MySQLdb x=[] all_zp = 0 all_n = 0 for i in range(5): url = 'https://api.hh.ru/vacancies' par = {'text': 'интернет маркетолог','per_page':'10', 'page':i} r = requests.get(url, params=par) e=r.json() x.append(e) for j in x: y = j['items'] #объявляем переменную n для подсчета, количества итераций цикла перебирающего зарплаты в вакансиях n=0 #объявляем переменную sum_zp для подсчета, суммы зарплат в вакансиях sum_zp=0 #цикл, переберает объекты, т.е перебирает вакансии for i in y: # проверяем есть ли значения в словаре salary. Т.е проверяем есть ли в вакансии данные по зарплате if i['salary'] !=None: #записываем значение в переменную s s=i['salary'] # проверяем есть ли значения по ключу акщь. Т.е проверяем есть ли в вакансии данные по минимальной зп if s['from'] !=None: # считаем количество обработанных вакансий в которых указана минимальная ЗП n+=1 #получаем минимальную ЗП по ключу from s['from'] #print (s['from']) #считаем сумму ЗП по вакансиям sum_zp +=s['from'] #добавляем сумму зп по итерации цикла all_zp +=sum_zp #добавляем сумму n по итерации цикла all_n +=n #считаем среднюю ЗП av_zp=all_zp/all_n av_zp=str(av_zp) #ниже блок кода для работы с базой #создаем подключение к БД db = MySQLdb.connect(host="localhost", user="vash_user", passwd="vash_pass", db="py", charset='utf8') #используя метод cursor() получаем объект для работы с базой cursor = db.cursor() #формируем sql запрос на запись sql = """INSERT INTO zp(zp) VALUES ('%(zarplata)s') """%{"zarplata":av_zp} # исполняем SQL-запрос cursor.execute(sql) # применяем изменения к базе данных db.commit() |
Еще раз в кратце объясню, что делает полученные код. Этот код каждую минуту получает данные из API hh.ru о зарплатах интернет маркетологов и считает среднюю ЗП, каждый раз он записывает полученное значение на новую строку в myslq базу py, которая находится у меня на сервере.
Вот так выглядят записанные значения в базе данных