0% acharam este documento útil (0 voto)
213 visualizações

Banco de Dados Python

O documento descreve como trabalhar com bancos de dados SQL usando Python. Ele explica como instalar as bibliotecas necessárias como Pandas e SQLAlchemy, criar uma engine de conexão com o banco de dados MySQL, e usar métodos como read_sql_table() e read_sql_query() para ler dados de tabelas e consultas SQL e criar DataFrames do Pandas.

Enviado por

augustocjr
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
213 visualizações

Banco de Dados Python

O documento descreve como trabalhar com bancos de dados SQL usando Python. Ele explica como instalar as bibliotecas necessárias como Pandas e SQLAlchemy, criar uma engine de conexão com o banco de dados MySQL, e usar métodos como read_sql_table() e read_sql_query() para ler dados de tabelas e consultas SQL e criar DataFrames do Pandas.

Enviado por

augustocjr
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 21

5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

DATA ANALYSIS

Trabalhando com Banco de Dados SQL


usando Python
Escrito por Felipe Santana
em março 30, 2020

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 1/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

JUNTE-SE A MAIS DE 30.000 PESSOAS.

Entre para nossa lista e receba conteúdos exclusivos e com prioridade

 Seu melhor e-mail Quero me Inscrever na Lista VIP

Nesse artigo vamos aprender a consumir informações de um SGBD


(sistema de gerenciamento de banco de dados) utilizando Python.

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 2/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

Instalando as bibliotecas necessárias

1 import pandas as pd
2 import sqlalchemy

A biblioteca sqlalchemy é a responsável por criar uma engine de


conexão.

Com essa biblioteca podemos criar a engine para fazer a conexão com
diversos bancos de dados como: MySQL, Oracle, SQL Server,
PostgreSQL entre outros.

Além da engine precisamos de um drive de conexão, cada banco de


dados possui o seu drive especí co. A seguir vamos instalar o drive do
MySQL.

1 !pip install pymysql


 Engine de Conexão ao Banco de Dados MySQL



Sintaxe:
engine = sqlalchemy.create_engine( ‘mysql+drive://usuario:senha@ip-
servidor:porta/banco-de-dados‘)

A engine contém os seguinte parâmetros:

SGDB: MySQL

Drive: pymysql

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 3/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

Usuário: nome do usuário, você pode usar o root por exemplo.

Senha: senha do usuário

ip-servidor: 127.0.0.1 ou localhost.

Porta: a padrão do mysql é a 3306

Banco de dados: nome do seu banco

Observação: os valores dos parâmetros acima são para uma conexão


local, para fazer uma conexão ao banco da sua empresa por exemplo,
você vai precisar mudar esses valores.


Documentação do SQLAlchemy


https://docs.sqlalchemy.org/en/latest/core/engines.html

Nessa documentação você encontra todos os métodos e con gurações


que essa biblioteca nos fornece.

Criando a Conexão

1 engine = sqlalchemy.create_engine('mysql+pymysql://root:d

Criamos a conexão conforme vimos anteriormente. Agora vamos


começar a fazer as nossas consultas no banco.

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 4/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

Método: read_sql_table

Com esse método conseguimos recuperar uma tabela inteira do nosso


banco e criar um DataFrame do pandas.

Parâmetros do método read_sql_table

table_name = Nome da tabela onde será feita a leitura dos dados.

con = Objeto conexão criado pelo SQLAlchemy.

schema= Schema onde a tabela está armazenada.

index_col = Coluna a ser de nida como index.

Lendo toda a tabela Employees e transformando em DataFrame.

 1 df = pd.read_sql_table('employees',engine)


Listando os dados e informações dos atributos.

1 df.head()

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 5/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

Essas são as 5 primeiras linhas da tabela employees. As colunas da


tabela viraram atributos e os seus registros viraram linhas.

1 df.info()
2
3 # Saída:
4 <class 'pandas.core.frame.DataFrame'>
5 RangeIndex: 300024 entries, 0 to 300023
6 Data columns (total 6 columns):
7 emp_no 300024 non-null int64
8 birth_date 300024 non-null datetime64[ns]
9 first_name 300024 non-null object
10 last_name 300024 non-null object
11 gender 300024 non-null object
12 hire_date 300024 non-null datetime64[ns]
13 dtypes: datetime64[ns](2), int64(1), object(3)
14 memory usage: 13.7+ MB

Com esse comando ca fácil observar o número de registros de cada


coluna e seus respectivos tipo de dados.


Lendo apenas algumas colunas da tabela.

1 df = pd.read_sql_table('employees', engine, columns=["fir


2
3 df.head()

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 6/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

Ele traz somente as colunas que foram especi cadas no parâmetro


columns.

Método: read_sql_query

Com esse método podemos trazer os dados usando uma query SQL, ele
nos permite consultar uma ou diversas tabelas.

Parâmetros do método read_sql_query

sql = String SQL Query que deverá ser executada para retornar o
conjunto de dados.

con = Objeto conexão criado pelo SQLAlchemy.

index_col = Coluna a ser de nida como index.

 params= Lista de parametros para serem passados ao método.

 Criando um DataFrame a partir de uma query ao banco de dados.

1 df = pd.read_sql_query("select * from employees",engine)

O select * from employees retorna todos os dados da tabela


employees.

Se você tiver um banco de dados grande evite usar esse comando


principalmente em um ambiente de produção, ele irá travar seu
ambiente e reduzir consideravelmente a performance do seu banco.

O mais e ciente é especi car os nomes das colunas que você deseja
consultar ou consumir.
https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 7/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

1 df.head()

Criando um DataFrame a partir de uma query ao banco de dados


utilizando a coluna emp_no com index.

 1 df_index = pd.read_sql_query("select * from employees",en


2
 3 df_index.head()

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 8/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

Nesse caso o index não é para fazer uma otimização na consulta ao


banco, ele irá apenas indexar o nosso DataFrame com a coluna que
escolhemos.

Criando um DataFrame a partir de uma query ligando várias tabelas.

1 query = '''
2 SELECT emp.first_name,
3 emp.last_name,
4 emp.gender,
5 depar.dept_name as departament_name,
6 dept.from_date,
7 dept.to_date
8 FROM employees emp
9 INNER JOIN dept_emp dept
10 ON emp.emp_no = dept.emp_no
11 INNER JOIN departments depar
12 ON dept.dept_no = depar.dept_no;
13 '''
14

15 df = pd.read_sql_query(query,engine)
 16 df.head()

Na nossa query utilizamos o inner join para fazer a ligação entre a


tabela employees e a tabela dept_emp e o resultado foi armazenado em

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 9/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

um DataFrame.

Criando um DataFrame a partir de uma query utilizando parâmetros


dinâmicos.

1 query = 'SELECT first_name, last_name ' \


2 'FROM employees ' \
3 'WHERE first_name = %s'
4 df = pd.read_sql_query(query, engine,params=["Mary"])
5 df.head()

Aqui estamos trazendo o primeiro e o último nome da tabela


employees ltrando por uma condição where, ou seja, será retornado
apenas os registros que tem o rst_name igual a Mary.

Se você quiser trazer um outro nome por exemplo, não é necessário


alterar a query basta mudar o valor do params.

Criando um DataFrame a partir de uma query utilizando parâmetros


nomeados.

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 10/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

1 SELECT emp.first_name,
2 emp.last_name,
3 emp.gender,
4 depar.dept_name as departament_name,
5 dept.from_date,
6 dept.to_date
7 FROM employees emp
8 INNER JOIN dept_emp dept
9 ON emp.emp_no = dept.emp_no
10 INNER JOIN departments depar
11 ON dept.dept_no = depar.dept_no
12 WHERE dept.from_date >= %(data_inicial)s AND to_date < %(
13 '''
14 df = pd.read_sql_query(query,
15 engine,
16 params={'data_inicial':"1990-01-22
17 'data_final':"1990-02-21"}
18 )

1 df.info()
2
 3 # Saída:
4 <class 'pandas.core.frame.DataFrame'>
 5 RangeIndex: 5 entries, 0 to 4
6 Data columns (total 6 columns):

7 first_name 5 non-null object
8 last_name 5 non-null object
9 gender 5 non-null object
10 departament_name 5 non-null object
11 from_date 5 non-null object
12 to_date 5 non-null object
13 dtypes: object(6)
14 memory usage: 368.0+ bytes

1 df.head(20)

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 11/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

Primeiro criamos dois parâmetros nomeados, data_inicial e data_ nal,


depois criamos um dicionário (chave:valor) onde informamos os
valores desses parâmetros.

Passamos para o head() o valor de 20 mas ele só nos retornou 5


registros, porque esses são os únicos registros que estão dentro da
faixa de valores que nos de nimos.


Método: read_sql

Faz o roteamento entre os métodos read_table e read_sql_query.

Se especi camos como primeiro parâmetro o nome de uma tabela é


como se ele executasse internamente o read_table, ou seja, ela busca a
tabela inteira, agora se passamos uma query como primeiro parâmetro
ele vai executar por baixo dos panos o read_sql.

Parâmetros do método read_sql

sql = String SQL Query que deverá ser executada para retornar o
conjunto de dados.

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 12/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

con = Objeto conexão criado pelo SQLAlchemy.

index_col = Coluna a ser de nida como index.

params= Lista de parametros para serem passados ao método.

Criando o DataFrame passando apenas o nome da tabela para o


método.

1 df = pd.read_sql("departments",engine)
2 df.head()

Criando o DataFrame através de uma query.

1 df = pd.read_sql("SELECT * FROM departments",engine)


2 df.head()

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 13/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

Método: to_sql

O processo agora será o inverso, vamos pegar o DataFrame e persistir


no banco de dados relacional, ele será criado como uma tabela no
banco.

Carregando a base de dados e criando o DataFrame.

 1 df = pd.read_csv("automobile.csv")
2
 3 df.head()

Parâmetros do método to_sql.


https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 14/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

name = Nome da tabela que será criada no SGBD.

con = Objeto conexão criado pelo SQLAlchemy.

schema = Nome do Schema onde será criada a tabela.

if_exists= Comportamento caso a tabela exista no SGBD.

index= Escreve o índice do DataFrame como uma coluna da tabela.

index_label= Nome da coluna de índice.

Criando a tabela no Banco de Dados a partir do DataFrame.

Na imagem acima conseguimos visualizar o nosso banco mais ele ainda


não possui nenhuma tabela.

Agora vamos criar a tabela a partir do Dataframe automobile.

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 15/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

1 df.to_sql(
2 name = 'tb_automobile',
3 con = engine,
4 )

Basta passar o nome da tabela que será tb_automobile e a engine de


conexão.

Vamos usar o Mysql workbench para visualizar se a tabela foi criada no


banco.

Mais detalhes em https://www.mysql.com/products/workbench/.

Pronto a nossa tabela já foi devidamente criada, mas perceba que


diferentemente do Dataframe temos uma coluna chamada index, isso
ocorreu porque não de nimos o index = False.

Criando a tabela no Banco de Dados sem a coluna de índice.

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 16/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

1 df.to_sql(
2 name = 'tb_automobile',
3 con = engine,
4 index = False,
5 if_exists ='append'
6 )

Além de dizer que não queremos uma coluna de index, vamos passar o
parâmetro if_exists = ‘append’ , isso quer dizer que se a tabela já existir
no banco esses dados serão acrescentados nessa mesma tabela.

Por padrão se você não informar esse parâmetro e a tabela já existir ele
irá retornar um erro, pois não é possível criar duas ou mais tabelas com
o mesmo nome.

Como podemos observar não temos mais a coluna de index na nossa


tabela.

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 17/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

Aulão de banco de dados com Python

Trabalhando com Banco de Dados SQL usando Python

 Conclusão:

Nesse artigo vimos como podemos nos conectar a um banco de dados,
fazer uma consulta e transformar esses resultados em um pandas
Dataframe para fazer diversas manipulações com as quais já estamos
acostumados, além disso mostramos como fazer o processo inverso
que foi transformar um Dataframe em uma tabela do banco.

Para os nossos exemplos usamos o Mysql , mas essas mesmas conexões


e transformações podem ser feitas com outros bancos de dados.

Bom espero que você tenha gostado e que compartilhe esse conteúdo
com mais pessoas, caso tenha alguma dúvida deixe nós comentários
que te responderemos o mais rápido possível.

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 18/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

Artigos Relacionados

CONCEITOS E DATA ANALYSIS DATA ANALYSIS


FUNDAMENTOS
Analisando dados Três Técnicas de
Curso Data Science
da Bolsa de Valores Amostragem de
do Zero
com Python Dados utilizando
Python

DATA ANALYSIS

Como conseguir
datasets de projetos
reais para usar no
seu portfólio

Ver mais

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 19/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

Entre para nossa lista e receba conteúdos exclusivos e


com prioridade
Junte-se a mais de 12.457 pessoas

 Todos os direitos reservados.

  

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 20/21
5/19/2020 Minerando Dados › Trabalhando com Banco de Dados SQL usando Python

https://minerandodados.com.br/trabalhando-com-banco-de-dados-sql-usando-python/ 21/21

Você também pode gostar