PyMySQL: a biblioteca para MySQL com Python
Introdução
Toda aplicação tem como a principal funcionalidade a persistência dos dados inseridos informados nela. Estes dados devem ser salvos de alguma forma, o responsável por isso é um sistema de banco de dados. Este programa se utiliza de uma linguagem específica para estruturar, organizar e consultar estes dados, essa linguagem é chamada de SQL, do inglês, Structured Query Language, ou Linguagem de Consulta Estruturada. Há diversas ferramentas no mercado: MySQL, PostgreSQL, SQL Server, e tantas outras, mas nos ateremos à primeira.
Para este tutorial é necessário você possuir o MySQL instalado em sua máquina, caso não tenha, acesse aqui. Para facilitar sua vida, você também pode utilizar o MySQL Workbench, para ter uma interface mais fácil de acesso a ele.
Utilizaremos da biblioteca PyMySQL para comunicação entre nosso programa feito em Python com o banco de dados MySQL.
Mão na massa
Tendo nosso ambiente de desenvolvimento pronto, vamos criar um banco de dados em nosso MySQL, para podermos salvar nossos dados nele.
CREATE DATABASE codenglish;
USE codenglish;
CREATE TABLE participant (
registration VARCHAR(20) PRIMARY KEY,
name VARCHAR(50),
course VARCHAR(20),
birthdate DATE
);
Criamos o banco de dados codenglish, acessamos ele e criamos uma tabela participant para registrarmos a matrícula, nome, curso e data de nascimento dos participante do projeto CodEnglish. Agora vamos para o Python, que será o responsável por capturar os dados.
Primeiramente, devemos instalar a biblioteca PyMySQL via pip:
$ python3 -m pip install PyMySQL
A partir disso, em qualquer arquivo .py (vou chamar de app.py) podemos fazemos a conexão com o banco de dados por meio dela através da biblioteca PyMySQL:
from pymysql import connect
database = connect(host="localhost",
user="root",
password="root",
database="codenglish")
Vamos capturar alguns dados do usuário para inserir em nossa base:
registration = str(input('Seu número de matricula: '))
name = str(input('Seu nome: '))
course = str(input('Seu curso: '))
birthdate = str(input('Nascimento (yyyy-mm-dd): '))
Agora inserimos estes dados no banco:
with database:
with database.cursor() as cursor:
# Comando para inserir os dados na tabela 'participant'
insert_participant_query = "INSERT INTO participant (registration,name,course,birthdate) VALUES (%s, %s, %s, %s)"
# Executamos a consulta
cursor.execute(insert_participant_query,
(registration, name, course, birthdate))
print(f'Participante "{name}" cadastrado!')
# Confirmamos que a operação deve ser realizada
database.commit()
Para deixar mais interessante, colocamos a escolha para o usuário listar todos os participantes já cadastrados:
with database:
...
list_participants = str(
input('Você quer listar todos os participantes? [y/N] ')).lower()[0]
if list_participants == 'y':
with database.cursor() as cursor:
# Query para selecionar todos os dados na tabela 'participant'
list_all_participants_query = "SELECT name, course FROM participant"
cursor.execute(list_all_participants_query)
# Pegamos todos os dados
list_all_participants = cursor.fetchall()
print('Nome\\tCurso')
# Percorremos todos as tuplas na lista de registros da tabela e mostramos
[print(f'{participant[0]}\\t{participant[1]}')
for participant in list_all_participants]
Ao final, temos o seguinte código:
from pymysql import connect
database = connect(host="localhost",
user="root",
password="root",
database="codenglish")
registration = str(input('Seu número de matricula: '))
name = str(input('Seu nome: '))
course = str(input('Seu curso: '))
birthdate = str(input('Nascimento (yyyy-mm-dd): '))
with database:
with database.cursor() as cursor:
insert_participant_query = "INSERT INTO participant (registration,name,course,birthdate) VALUES (%s, %s, %s, %s)"
cursor.execute(insert_participant_query,
(registration, name, course, birthdate))
print('Você foi cadastrado!')
database.commit()
list_participants = str(
input('Você quer listar todos os participantes? [y/N] ')).lower()[0]
if list_participants == 'y':
with database.cursor() as cursor:
list_all_participants_query = "SELECT name, course FROM participant"
cursor.execute(list_all_participants_query)
list_all_participants = cursor.fetchall()
print('Nome\\tCurso')
[print(f'{participant[0]}\\t{participant[1]}')
for participant in list_all_participants]
Conclusão
Fizemos uma rápida brincadeira para trabalhar com banco de dados MySQL com Python. Mas não precisamos nos limitar a isso, tem conceitos muito mais avançados no estudo de bancos. Em uma futura postagem, pretendo apresentar a você uma maneira mais sofisticada de comunicação com banco de dados, independente de qual seja o famoso ORM.
Agradeço aqui sua atenção, continue aprendendo mais em nossa plataforma, acessando outras postagens. Até a próxima.