Python + MySQL – Criando um CRUD completo

A conexão com banco de dados é algo comum e utilizado em várias aplicações. Vamos ver como realizar a conexão com o banco de dados MySQL e como fazer operações básicas utilizando o Python. Para exemplificar, vamos criar um CRUD (create, read, update e delete) completo.

Pré-requisitos

Como pré-requisito para utilizar o exemplo deste artigo, temos:

  • python3 – Compilador da linguagem Python 3.
  • pip – Sistema de gerenciamento de pacotes para o Python.

Para realizar a conexão com nosso banco MySQL, vamos utilizar o driver do mysql para o Python. Já com o python3 e o pip devidamente instalados, realize a instalação do drive com o comando abaixo.

python3 -m pip install mysql-connector-python

Criando o banco de dados MySQL

Vamos utilizar um banco chamado teste, com a tabela users. Abra o terminal do mysql e crie o banco de dados com o comando.

create database teste;

Depois acesse o banco criado com o comando.

use teste;

E crie a tabela users com o comando.

create table users (
  id int not null auto_increment primary key,
  name varchar(100) not null,
  email varchar(100) not null,
  created datetime not null
);

Visualize a tabela criada com o comando.

desc users;

Para ver mais sobre o MySQL veja o artigo: https://irias.com.br/blog/mysql-comandos-basicos/

Create

Após criar nosso banco, vamos inserir dados utilizando o Python. Crie o arquivo create.py e insira o código abaixo no mesmo.

# -*- encoding: utf-8 -*-

import mysql.connector
import datetime

connection = mysql.connector.connect(
  host="localhost",
  user="usuariobancodados",
  password="senhausuario",
  database="bancodados"
)

cursor = connection.cursor()

sql = "INSERT INTO users (name, email, created) VALUES (%s, %s, %s)"
data = (
  'Primeiro Usuário',
  'primeirousuario@teste.com.br',
  datetime.datetime.today()
)

cursor.execute(sql, data)
connection.commit()

userid = cursor.lastrowid

cursor.close()
connection.close()

print("Foi cadastrado o novo usuário de ID:", userid)

No código acima, primeiro importamos o driver do MySQL para o Python. Depois iniciamos a conexão, informando os dados básicos para conexão. Então criamos nosso cursor, qual faremos as operações. Atribuímos nossa query de insert a variável sql e nossos dados que queremos inserir a nossa variável data.

Por fim utilizamos o comando execute, para executar a query e o commit para efetivá-la. Também utilizamos o comando lastrowid, para recuperar o ID da última linha, que no caso é a que acabamos de inserir. No final imprimimos uma mensagem no terminal.

Para utilizar o script, use no terminal Linux o comando python3.

python3 create.py

Depois no banco de dados utilize o comando abaixo para visualizar o usuário que foi criado.

select * from users; 

 Read

Após inserir dados em nossa tabela com o Python, vamos fazer a leitura com o select. Crie o arquivo read.py com o código abaixo.

# -*- encoding: utf-8 -*-

import mysql.connector
import datetime

connection = mysql.connector.connect(
  host="localhost",
  user="usuariobancodados",
  password="senhausuario",
  database="bancodados"
)

cursor = connection.cursor()

sql = "SELECT * FROM users"

cursor.execute(sql)
results = cursor.fetchall()

cursor.close()
connection.close()

for result in results:
  print(result)

O código é parecido com o anterior, mas agora utilizamos a função fetchall para recuperar todos os resultados da query SQL executada. No final utilizamos o comando for, para percorrer os resultados e imprimir linha por linha.

Rode o script com o comando.

python3 read.py

Update

Agora vamos atualizar as informações em nosso banco de dados. Nosso código será similar ao de criação, a diferença está na query SQL que ao invés de insert vamos utilizar o update.

# -*- encoding: utf-8 -*-

import mysql.connector
import datetime

connection = mysql.connector.connect(
  host="localhost",
  user="usuariobancodados",
  password="senhausuario",
  database="bancodados"
)

cursor = connection.cursor()

sql = "UPDATE users SET name = %s, email = %s WHERE id = %s"
data = (
  'Primeiro Usuário Editado',
  'primeirousuarioeditado@teste.com.br',
  1
)

cursor.execute(sql, data)
connection.commit()

recordsaffected = cursor.rowcount

cursor.close()
connection.close()

print(recordsaffected, " registros alterados")

Execute o script com o comando.

python3 update.py

Utilizando novamente o script read.py podemos ver nosso registro editado.

Delete

Por último temos o deletar, que funciona do mesmo modo do update. Ele também se diferencia pela query SQL, agora utilizamos o delete.

# -*- encoding: utf-8 -*-

import mysql.connector
import datetime

connection = mysql.connector.connect(
  host="localhost",
  user="usuariobancodados",
  password="senhausuario",
  database="bancodados"
)

cursor = connection.cursor()

sql = "DELETE FROM users WHERE id = %s"
data = (2,)

cursor.execute(sql, data)
connection.commit()

recordsaffected = cursor.rowcount

cursor.close()
connection.close()

print(recordsaffected, " registros excluídos")
python3 delete.py

Assim chegamos no fim deste artigo que foi um tutorial bem simples para utilizar o banco de dados MySQL com  Python.

6 comentários em “Python + MySQL – Criando um CRUD completo”

  1. Boa tarde! Tutorial excelente! Eu tenho uma observação e uma dúvida: a observação é que é preciso formatar o datetime.today, no meu caso usei
    today = datetime.today()
    data_hora_atual = today.strftime(“%Y-%m-%d %H:%M:%S”)

    a dúvida é que não entendi bem no arquivo delete.py porque usar data = (2, ). Me deixou confuso essa vírgula depois do dois, apesar de que não funciona data = 2.

    Abraço!

    1. Bom dia Fabio, muito obrigado pelo comentário. Sobre utilizar data = (2,) e não funcionar passando data = 2, isso é devido a função cursor.execute exigir como parâmetro uma tupla. https://www.w3schools.com/python/python_tuples.asp. Já a vírgula no final data = (2,) é necessária pois em Python, uma tupla com um único valor deve incluir uma vírgula, pois sem a vírgula a variável será avaliada como escalar. Já com a vírgula ela é avaliada como uma tupla. Isso só vale para tuplas com um único item.

      1. Anderson, obrigado pela resposta! Como faria para, ao invés de colocar os dados de entrada diretamente no código, recebermos de um formulário html?

        1. Rapaz fiz uns teste aqui e para fazer a incerção de dados atravez de uma entrada externa, e só inverter
          sql = “INSERT INTO users (name, email, created) VALUES (%s, %s, %s)”
          data = (
          str(input(“Digite seu nome”)),
          str(input(“Digite seu email”)),
          datetime.datetime.today()
          )

          só consegui fazer a incerção atravéz do terminal, por formulario ainda não testei.

          ao roda o codego, elesolicita que digite seu nome, ao da enter ela solicita tamém o email e finaliza o cadastro .

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *