Banco de dados Python SQL 1

Manipular Dados no MySQL com Pandas

conectar_mysql_python

Fala galera do mundo dos dados! Seguimos na prática como conectar um banco de dados MySQL com Python. Se não viu o artigo anterior, confere como Conectar Banco de Dados MySQL com Python. Agora com mais alguns ingredientes para deixar a solução bem mais interessante. Vamos manipular dados no MySQL com Pandas. Sendo assim, utilizaremos mais duas bibliotecas Python, são elas a SQLAlchemy e o Pandas, para trabalhar com um volume maior de dados e deixar a solução mais robusta. Partiu para o código!!!

Conectar MySQL com SQLAlchemy 

O SQLAlchemy é uma biblioteca para manipulação de bancos relacionais através da linguagem Python. Com ela é possível trabalhar com os principais bancos relacionais de mercado, inclusive o MySQL.

Então, seguimos para o código Python mostrando como conectar MySQL com SQLAlchemy. E o primeiro passo é fazer a importação das bibliotecas necessárias. No código abaixo importamos a função create_engine da biblioteca sqlalchemy e a biblioteca pandas

from sqlalchemy import create_engine
import pandas as pd

Com as bibliotecas importadas, criaremos a função de conexão do banco de dados. Usando a função create_engine, que recebe a string de conexão com os parâmetros host, user, passwd e database. Finalizando a função retorna a conexão com o banco.

def mysql_connection(host, user, passwd, database=None):
    engine = create_engine(f'mysql+pymysql://{user}:{passwd}@{host}/{database}')
    return engine.connect()

Agora chamamos a função mysql_connection, e passando os parâmetros host, user, passwd e database, para criar a conexão.

connection = mysql_connection('localhost', 'root', 'mysql123', 'dadosaocubo')

Conexão criada, podemos criar uma tabela no banco de dados.

Criar Tabela com SQLAlchemy 

O passo seguinte, será a criação da tabela na base de dados dadosaocubo. Então, a variável query, vai receber um comando SQL (CREATE TABLE, para criação da tabela). Em seguida, executamos o comando SQL da variável query através da variável connection.

query = '''
    CREATE TABLE clientes2 (
        id       INT PRIMARY KEY, 
        nome     VARCHAR(100),
        telefone VARCHAR(15),
        email    VARCHAR(100),
        cidade   VARCHAR(50)
    )
'''
connection.execute(query)

Com a nossa tabela pronta no MySQL, podemos inserir e consultar dados no MySQL. Primeiro, realizaremos a operação de forma mais artesanal utilizando a execução de queries do SQLAlchemy, e em seguida, a realizaremos diretamente com as funções SQL do Pandas.

Inserir Dados com SQLAlchemy 

Para inserir os dados com SQLAlchemy, criamos um dataframe pandas, começando com a criação de um dicionário. No código Python abaixo a variável dic contem o dicionário.

dic = {'id': [1001, 1002, 1003, 1004, 1005, 1006],
       'nome': ['Joãozinho','Paula','Patricia','Zé','Richarlison','Vini'],
       'telefone': ['7199999-9999','2199999-9999','1199999-9999',
                    '4199999-9999','3199999-9999','2199999-9999'],
       'email': ['joao@email.com','paula@email.com','paty@email.com',
                 'ze@email.com','pombo@email.com','vini@email.com'],
       'cidade': ['Salvador','Rio','Sampa','Curitiba','Nova Venécia','Madri']}

Em seguida, transformando esse dicionário no dataframe.

df = pd.DataFrame(dic)
df.head()

Confere na imagem abaixo, como ficaram os dados do nosso dataframe pandas.

MySQL com Pandas

O código Python abaixo, vai inserir cada linha do dataframe Pandas no banco de dados MySQL, através da biblioteca SQLAlchemy. Para inserir cada linha por vez, foi criado um loop for para percorrer cada index do dataframe.

Os registros serão inseridos na tabela. Temos a variável query, com um comando SQL (INSERT INTO, para inserir dados), na string SQL os valores a serem inseridos no banco, são passados através de parâmetros de acordo com as colunas do dataframe. Em seguida, é executado o comando SQL da variável query através da variável connection.

for i in df.index:
    query = '''
    INSERT INTO clientes2 VALUES 
        ('%s','%s','%s','%s','%s');
    ''' % (df['id'][i], df['nome'][i], df['telefone'][i], df['email'][i], df['cidade'][i])
    connection.execute(query)

Agora podemos consultar os dados inseridos na tabela clientes2.

Consultar Dados com SQLAlchemy 

Para consultar os dados no MySQL com Python. Mais uma vez a variável query, agora com um comando SQL (SELECT para consultar dados). Em seguida, é executado o comando SQL da variável query através da variável connection, armazenando os dados na variável result através da função fetchall. Para armazenar o nome das colunas na variável columns, seguimos o mesmo passo anterior, mas através da função keys.

query = '''
    SELECT * FROM clientes2
'''
result = connection.execute(query).fetchall()
columns = tuple(connection.execute(query).keys())

Em seguida, transformando essas variáveis em um dataframe.

df2 = pd.DataFrame(result, columns=columns)
df2.head()

Confere na imagem abaixo, como ficaram os dados do nosso dataframe pandas. Exatamente igual de como ele foi criado antes de inserir os dados no banco.

MySQL com Pandas

Dá para melhorar ainda esses códigos!!! Sendo assim, faremos diretamente com as funções SQL do Pandas.

Inserir Dados no MySQL com Pandas

Antes de inserir os dados criaremos uma tabela de clientes exatamente igual a primeira, mas chamaremos de clientes3.

E então, chegou a hora de fazer a mágica e com apenas uma linha de código, levar os dados de um dataframe Pandas para o banco MySQL com a função to_sql

df.to_sql('clientes3', connection, if_exists='append', index=False)

Se não acredita que essa linha funciona, partiu consultar os dados dessa tabela de clientes3.

Consultar Dados no MySQL com Pandas

Para consultar, mais uma mágica com a função read_sql, também em uma linha de código, pegamos os dados do MySQL e colocamos em um dataframe Pandas.

df3 = pd.read_sql('SELECT * FROM clientes3', connection)
df3.head()

Na imagem abaixo, o resultado dos dados do nosso dataframe pandas direto do MySQL. Exatamente igual aos outros dois criados anteriormente.

MySQL com Pandas

Me diz se MySQL com Pandas não é uma combinação perfeita?!

MySQL com Pandas ao Cubo

E então, chegamos ao final de como manipular dados no MySQL com Pandas. Vimos como fazer algumas das principais operações SQL integradas com o Pandas. Se curtiu, não esqueça de compartilhar o conteúdo e deixar aquele feedback para nós. Tamo juntos e até a próxima.

Conteúdos ao Cubo

Se você curtiu o conteúdo, lá no Dados ao Cubo tem muito mais. Então, deixo algumas sugestões de conteúdos que você pode encontrar por lá, sempre falando sobre o mundo dos dados.

Finalizando com um convite para quem quer ser Parceiro de Publicação Dados ao Cubo, escrever o próximo artigo e ter divulgação para toda a comunidade de dados no LinkedIn.

Gostou? Compartilhe!

1 Comment

  • Reply
    Pericles
    31 de agosto de 2023

    É possível alterar uma linha no dataframe e salvar apenas essa linha na tabela do sqlite, por exemplo? Tem o trecho de código que poderia mostrar isso?

Deixe um comentário

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