Curso
Os dados estão no centro de quase todos os aplicativos digitais que você possa imaginar. De aplicativos móveis e jogos de computador a ferramentas bancárias e veículos autônomos, tudo é baseado em dados. Onde todos esses dados são armazenados? A resposta é: bancos de dados.
Um banco de dados é uma coleção organizada de dados estruturados, normalmente armazenados eletronicamente em um sistema de computador. Apesar do recente desenvolvimento de novos tipos de bancos de dados (projetados para lidar com o aumento do volume e da variabilidade dos dados), uma quantidade considerável de dados em todo o mundo ainda é armazenada nos chamados bancos de dados relacionais. Os bancos de dados relacionais armazenam dados como coleções de tabelas predefinidas com linhas e colunas que são conectadas por meio de uma ou mais relações.
A capacidade de manipular e extrair dados desses bancos de dados é uma habilidade essencial no setor de dados e é uma habilidade cada vez mais procurada. A maneira padrão de criar e gerenciar bancos de dados é a SQL (Structured Query Language, Linguagem de Consulta Estruturada). O SQL é o bloco de construção de alguns dos bancos de dados relacionais mais populares do mercado, como PostgreSQL, Microsoft SQL Server, MySQL e SQLite
Neste tutorial, vamos nos concentrar nos bancos de dados baseados no PostgreSQL e em como você pode criar, conectar-se a eles e gerenciá-los usando Python. O conjunto SQL-Python é uma das habilidades obrigatórias que você deve dominar em sua jornada de ciência de dados. Para conectar o Python ao PostgreSQL, usaremos o pacote psycopg2, o adaptador de banco de dados PostgreSQL mais popular para Python. Você está pronto para o desafio? Vamos começar!
Entendendo o PostgreSQL
O PostgreSQL é um banco de dados relacional leve, gratuito e de código aberto. Devido à sua arquitetura comprovada, confiabilidade, integridade de dados e integração suave com outras linguagens de programação populares, como Python e R, o PostgreSQL é extremamente bem aceito pelo setor, com empresas de todos os tamanhos e regiões que o utilizam.
O PostgreSQL usa e amplia a linguagem SQL combinada com muitos recursos que armazenam e dimensionam com segurança as cargas de trabalho de dados mais complicadas.
Para começar a usar o PostgreSQL, primeiro você precisa instalá-lo em seu computador. No site oficial do PostgreSQL, você pode encontrar vários pacotes e instaladores prontos para uso do PostgreSQL e um arquivo de código-fonte disponível para diferentes plataformas e casos de uso.
Para este tutorial, usaremos o Postgres App, um aplicativo simples e nativo do macOS que inclui todos os recursos necessários para você começar a usar o PostgreSQL, mas lembre-se de que todos os outros pacotes disponíveis são igualmente válidos, e a sintaxe do PostgreSQL para executar consultas é a mesma em todos os pacotes.
Se você quiser saber mais sobre o PostgreSQL, consulte nosso Guia para iniciantes no PostgreSQL e o bom número de cursos de SQL.
Entendendo o psycopg2
Para se conectar a um banco de dados já criado no seu sistema ou na Internet, você terá de instruir o Python a detectá-lo. Em outras palavras, você terá de informar ao Python que o banco de dados de seu interesse é um banco de dados PostgreSQL.
No Python, você tem várias opções que pode escolher. Nesse caso, usaremos o psycopg2, provavelmente o adaptador de banco de dados PostgreSQL mais popular para Python. O Psycopg2 requer alguns pré-requisitos para funcionar corretamente em seu computador. Depois de instalá-los (leia a documentação para obter mais informações), você pode instalar o psycopg2
como qualquer outro pacote Python:
pip install psycopg2
No entanto, se quiser usar o psycopg2
diretamente, você também pode instalar o psycopg2-binary
, uma versão autônoma do pacote, que não requer um compilador ou bibliotecas externas. Essa é a instalação preferida para novos usuários.
pip install psycopg2-binary
Por fim, se estiver usando o Python em um ambiente Conda, você deverá instalar o psycopg2
usando a instalação do Instalação do Anaconda:
conda install -c anaconda psycopg2
Agora que você está pronto, vamos criar sua primeira conexão com a sessão do PostgreSQL com psycopg2
!
Conectando o Python ao PostgreSQL
Para que você possa usar o Python para interagir com um banco de dados PostgreSQL, precisamos fazer uma conexão. Isso é feito com a função psycopg2 connect()
, que cria uma nova sessão de banco de dados e retorna uma nova instância de conexão.
Para este tutorial, vamos nos conectar a um banco de dados chamado "datacamp_courses" que está hospedado localmente.
conn = psycopg2.connect(database = "datacamp_courses",
user = "datacamp",
host= 'localhost',
password = "postgresql_tutorial",
port = 5432)
Os parâmetros básicos de conexão necessários são:
- database. O nome do banco de dados.
- user. Nome de usuário necessário para autenticação.
- password. Senha usada para autenticação.
- host. Endereço do servidor do banco de dados (no nosso caso, o banco de dados é hospedado localmente, mas pode ser um endereço IP).
- porto. Número da porta de conexão (o padrão é 5432 se não for fornecido).
Torne-se um engenheiro de dados
Criando uma tabela no PostgreSQL
É hora de você criar sua primeira tabela no banco de dados datacamp_courses
. Queremos que você crie uma tabela com informações sobre alguns dos cursos do catálogo de cursos da DataCamp. A tabela tem o seguinte esquema:
A especificação nos fornece várias informações sobre as colunas da tabela. Achave primária da tabela deve ser course_id
e seu tipo de dados deve ser um número inteiro. Uma chave primária é uma restrição que impõe que os valores da coluna sejam não nulos e exclusivos. Ele permite que você identifique exclusivamente uma instância específica ou um conjunto de instâncias presentes na tabela.
As colunas restantes fornecem informações sobre o nome do curso, o nome da instrução do curso e o tópico do curso.
Antes de criar a tabela, é importante explicar como funciona a instância de conexão que você acabou de criar. Em essência, a conexão encapsula uma sessão de banco de dados e permite que você execute comandos e consultas SQL, como SELECT
, INSERT
, CREATE
, UPDATE
ou DELETE
, usando o método cursor()
e faça alterações persistentes usando o método commit()
.
Depois de criar a instância do cursor, você pode enviar comandos para o banco de dados usando o método execute()
e recuperar dados de uma tabela usando o método fetchone()
, fetchmany()
, ou fetchall()
.
Por fim, é importante fechar o cursor e a conexão com o banco de dados sempre que você terminar suas operações. Caso contrário, eles continuarão a manter os recursos do lado do servidor. Para isso, você pode usar ométodo close()
.
Abaixo, você pode encontrar o código para criar a tabela datacamp_courses
:
# Open a cursor to perform database operations
cur = conn.cursor()
# Execute a command: create datacamp_courses table
cur.execute("""CREATE TABLE datacamp_courses(
course_id SERIAL PRIMARY KEY,
course_name VARCHAR (50) UNIQUE NOT NULL,
course_instructor VARCHAR (100) NOT NULL,
topic VARCHAR (20) NOT NULL);
""")
# Make the changes to the database persistent
conn.commit()
# Close cursor and communication with the database
cur.close()
conn.close()
Esse é um exemplo muito básico de como criar tabelas no PostgreSQL, mas as coisas podem ficar muito mais complexas. Se você quiser saber mais sobre como criar um banco de dados PostgreSQL e explorar a estrutura, os tipos de dados e como normalizar bancos de dados, confira nosso artigo Criando banco de dados PostgreSQL para você.
Executando consultas básicas do PostgreSQL em Python
A tabela datacamp_courses
está pronta; agora é hora de você usar o SQL para realizar algumas consultas básicas!
INSERIR
Você deve ter notado que a tabela não tem valores até o momento. Para criar registros na tabela datacamp_courses
, precisamos do comando INSERT
.
cur = conn.cursor()
cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Introduction to SQL','Izzy Weber','Julia')");
cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Analyzing Survey Data in Python','EbunOluwa Andrew','Python')");
cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Introduction to ChatGPT','James Chapman','Theory')");
cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Introduction to Statistics in R','Maggie Matsui','R')");
cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Hypothesis Testing in Python','James Chapman','Python')");
conn.commit()
cur.close()
conn.close()
A tabela resultante tem a seguinte aparência:
course_id |
course_name |
course_instructor |
tópico |
1 |
Izzy Weber |
Julia |
|
2 |
EbunOluwa Andrew |
Python |
|
3 |
James Chapman |
Teoria |
|
4 |
Maggie Matsui |
R |
|
5 |
James Chapman |
Python |
SELECIONAR
Ler dados em bancos de dados SQL é provavelmente algo que você fará muito em sua jornada de ciência de dados. Isso geralmente é chamado de consulta SELECT
. Por enquanto, vamos ver como a tabela datacamp_courses
está se comportando.
Chamaremos o comando clássico SELECT * FROM database_name
para que você leia todos os dados disponíveis na tabela. Em seguida, usaremos o método fetchall()
para buscar todas as linhas disponíveis. Observe que o PostgreSQL cria automaticamente um índice numérico para a coluna course_id
.
cur = conn.cursor()
cur.execute('SELECT * FROM datacamp_courses;')
rows = cur.fetchall()
conn.commit()
conn.close()
for row in rows:
print(row)
(1, 'Introduction to SQL', 'Izzy Weber', 'Julia')
(2, 'Analyzing Survey Data in Python', 'EbunOluwa Andrew', 'Python')
(3, 'Introduction to ChatGPT', 'James Chapman', 'Theory')
(4, 'Introduction to Statistics in R', 'Maggie Matsui', 'R')
(5, 'Hypothesis Testing in Python', 'James Chapman', 'Python')
ATUALIZAÇÃO
Os dados geralmente vêm com erros. Você deve ter notado na seção anterior que o tópico associado ao curso "Introdução ao SQL" é Julia. Depois de verificar as informações sobre o curso, descobrimos o erro. Precisamos alterá-lo e escrever "SQL" em vez disso. Isso pode ser feito com a instrução UPDATE
, como segue:
cur = conn.cursor()
cur.execute("UPDATE datacamp_courses SET topic = 'SQL' WHERE course_name = 'Introduction to SQL';")
conn.commit()
conn.close()
DELETE
Por fim, você pode querer excluir um dos registros da tabela. Por exemplo, vamos excluir o curso Introdução à estatística em R:
cur = conn.cursor()
cur.execute("""DELETE from datacamp_courses WHERE course_name = 'Introduction to Statistics in R'""");
conn.commit()
cur.close()
Consultas avançadas do PostgreSQL em Python
Na seção anterior, examinamos as consultas SQL mais básicas. Mas você ainda tem muito a aprender. Vamos ver algumas consultas mais avançadas.
ORDENAR POR
Digamos que você queira classificar seu banco de dados pelo nome do instrutor. Você pode usar a declaração ORDER BY
:
cur = conn.cursor()
cur.execute('SELECT * FROM datacamp_courses ORDER BY course_instructor')
rows = cur.fetchall()
for row in rows:
print(row)
(2, 'Analyzing Survey Data in Python', 'EbunOluwa Andrew', 'Python')
(1, 'Introduction to SQL', 'Izzy Weber', 'SQL')
(3, 'Introduction to ChatGPT', 'James Chapman', 'Theory')
(4, 'Hypothesis Testing in Python', 'James Chapman', 'Python')
GROUP BY
Você pode querer executar algumas funções agregadas em diferentes grupos de dados. Por exemplo, você pode estar interessado em calcular o número de cursos dos diferentes instrutores de cursos. Você pode fazer esse tipo de operação com a função GROUP BY
.
cur = conn.cursor()
cur.execute('SELECT course_instructor, COUNT(*) FROM datacamp_courses GROUP BY course_instructor')
rows = cur.fetchall()
for row in rows:
print(row)
('James Chapman', 2)
('Izzy Weber', 1)
('EbunOluwa Andrew', 1)
JUNTAR
Até o momento, trabalhamos apenas com a tabela datacamp_course
. No entanto, você só começa a aproveitar todo o potencial dos bancos de dados relacionais, como o PostgreSQL, quando trabalha com várias tabelas ao mesmo tempo.
A ferramenta mágica para combinar várias tabelas é a operação JOIN
. Imagine que temos uma segunda tabela em nosso banco de dados chamada programming_languages
que contém informações básicas sobre as principais linguagens de programação para ciência de dados, incluindo o nome, a posição no Índice TIOBE e o número de cursos sobre a linguagem de programação no DataCamp. A tabela tem a seguinte aparência:
language_id |
language_name |
course_number |
tiobe_ranking |
1 |
SQL |
31 |
8 |
2 |
Python |
157 |
1 |
3 |
R |
132 |
16 |
4 |
Julia |
2 |
33 |
5 |
Scala |
1 |
38 |
Imagine que você queira mesclar as duas tabelas para obter as informações dos cursos, juntamente com a posição do idioma no índice TIOBE. Usaremos um INNER JOIN
para obter apenas as informações das linguagens de programação que aparecem na tabela datacamp_course
.
cur = conn.cursor()
cur.execute("""SELECT course_name, course_instructor, topic, tiobe_ranking
FROM datacamp_courses
INNER JOIN programming_languages
ON datacamp_courses.topic = programming_languages.language_name""")
rows = cur.fetchall()
for row in rows:
print(row)
('Introduction to SQL', 'Izzy Weber', 'SQL', 8)
('Analyzing Survey Data in Python', 'EbunOluwa Andrew', 'Python', 1)
('Hypothesis Testing in Python', 'James Chapman', 'Python', 1)
Esse é apenas um exemplo, mas o potencial das uniões de SQL é infinito, o que faz com que esse seja um tópico de conhecimento obrigatório. Nosso curso, tutoriale folha de dicas sobre joins ajudarão você a começar.
Primeiros passos com o SQLAlchemy
O Psycopg2 é uma excelente ferramenta para você se conectar a bancos de dados PostgreSQL. Mas e se você tiver que trabalhar com bancos de dados hospedados em diferentes bancos de dados SQL, como Oracle e MySQL? Nesses cenários, talvez seja melhor usar uma ferramenta que possa se conectar a diferentes tipos de bancos de dados SQL. Para isso, o SQLAlchemy é um ótimo candidato.
Em palavras simples, o SQLAlchemy permite que os usuários conectem bancos de dados usando a linguagem Python, executem consultas SQL usando programação baseada em objetos e simplifiquem o fluxo de trabalho.
Embora a sintaxe varie em comparação com psycopg2
, você pode fazer praticamente a mesma coisa. Abaixo, você encontra um exemplo de como criar um mecanismo para se conectar aos nossos conjuntos de dados datacamp_courses
e ler todos os dados disponíveis na tabela datacap_course
import sqlalchemy as db
engine = db.create_engine("postgresql://datacamp@localhost:5432/datacamp_courses")
conn = engine.connect()
output = conn.execute("SELECT * FROM datacamp_courses")
print(output.fetchall())
conn.close()
[(3, 'Introduction to ChatGPT', 'James Chapman', 'Theory'),
(5, 'Hypothesis Testing in Python', 'James Chapman', 'Python'),
(2, 'Analyzing Survey Data in Python', 'EbunOluwa Andrew', 'Python'),
(1, 'Introduction to SQL', 'Izzy Weber', 'SQL')]
O SQLAlchemy é outra ferramenta excelente que vale a pena aprender. Para ter uma ideia de como a ferramenta funciona, dê uma olhada no nosso Tutorial do SQLALchemy.
Usando o PostgreSQL no DataCamp DataLab
Na DataCamp, trabalhamos duro para tornar a ciência de dados mais fácil e acessível a todos. Essa foi a razão por trás da criação do DataCamp DataLab, um notebook baseado em nuvem projetado especificamente para a ciência de dados. Você pode pensar no DataCamp DataLab como uma mistura de Jupyter Notebook e Google Docs, que permite aos usuários escrever códigos, analisar dados individual ou coletivamente e compartilhar insights de dados.
Conectar o DataLab a bancos de dados PostgreSQL, bem como a outros bancos de dados SQL, é extremamente fácil. O DataLab permite que você se conecte a fontes de dados de forma segura. Ao mesmo tempo, você pode continuar sua análise de dados com Python ou R. Você só precisa criar uma integração, seguindo um processo simples e sem código, no qual precisará inserir suas credenciais de conexão.
Por fim, se você quiser experimentar a integração, mas não tiver um banco de dados PostgreSQL ao qual se conectar, poderá usar um de nossos bancos de dados PostgreSQL de amostra!
Você está curioso para saber mais sobre o DataCamp DataLab? Confira este artigo para saber mais sobre esse notebook de última geração para ciência de dados.
Conclusão
Bom trabalho! Neste tutorial, você se familiarizou com o PostgreSQL e aprendeu a gerenciar bancos de dados sem sair do Python, usando o pacote psycopg2. Mas esse é apenas o começo da jornada. O SQL é uma das linguagens de programação mais usadas na ciência de dados. Também é bastante fácil de aprender, portanto você não tem desculpa.
Felizmente, o DataCamp tem tudo o que você precisa. Aqui estão alguns recursos que podem ajudar você a se tornar fluente em PostgreSQL e SQL em geral:
Obter uma certificação Python
Perguntas frequentes
Qual é a diferença entre psycopg2 e psycopg2-binary?
psycopg2
é o pacote de código-fonte e requer a instalação de um compilador C e das bibliotecas do cliente PostgreSQL em seu sistema. psycopg2-binary
é uma versão pré-compilada que inclui tudo o que você precisa para começar rapidamente. Ele é ótimo para fins de desenvolvimento e aprendizado, mas não é recomendado para ambientes de produção devido a possíveis incompatibilidades binárias.
Como lidar com erros de conexão de banco de dados em Python?
Você pode capturar e tratar erros relacionados à conexão usando os blocos try-except
do Python. Por exemplo:
import psycopg2
from psycopg2 import OperationalError
try:
conn = psycopg2.connect(
database="datacamp_courses",
user="datacamp",
password="postgresql_tutorial",
host="localhost",
port=5432
)
except OperationalError as e:
print(f"An error occurred: {e}")
Isso permite que seu script falhe de forma graciosa e até mesmo tente novamente as conexões, se necessário.
Como faço para me conectar a um banco de dados PostgreSQL remoto em vez de um local?
Para se conectar a um banco de dados PostgreSQL remoto, substitua localhost
pelo endereço IP ou nome de domínio do servidor remoto. Certifique-se de que:
- O servidor de banco de dados permite conexões externas.
- A porta correta (geralmente 5432) está aberta no firewall.
- Seu arquivo PostgreSQL
pg_hba.conf
está configurado para aceitar conexões remotas.
Posso usar variáveis de ambiente para armazenar credenciais de banco de dados com segurança?
Sim, armazenar credenciais como variáveis de ambiente é uma prática mais segura do que codificá-las. Você pode acessá-los em Python usando os.environ
:
import os
conn = psycopg2.connect(
database=os.environ["DB_NAME"],
user=os.environ["DB_USER"],
password=os.environ["DB_PASSWORD"],
host=os.environ["DB_HOST"],
port=os.environ["DB_PORT"]
)
Use ferramentas como .env
arquivos com python-dotenv
para gerenciar isso localmente.
Como posso evitar ataques de injeção de SQL ao usar o psycopg2?
Sempre use consultas parametrizadas em vez de formatação de cadeia de caracteres ao inserir dados do usuário:
cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES (%s, %s, %s)",
('Course Name', 'Instructor', 'Topic'))
Isso evita que usuários mal-intencionados injetem códigos SQL prejudiciais em suas consultas.
Como faço para atualizar várias linhas de uma vez no psycopg2?
Você pode usar o método executemany()
para inserir ou atualizar várias linhas de forma eficiente:
courses = [
('Course A', 'Instructor A', 'Python'),
('Course B', 'Instructor B', 'R')
]
cur.executemany("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES (%s, %s, %s)", courses)
Quais tipos de dados estão disponíveis no PostgreSQL e como eles são mapeados para o Python?
Aqui estão alguns tipos de dados comuns do PostgreSQL e seus equivalentes em Python:
Tipo de PostgreSQL | Equivalente a Python |
---|---|
INTEGER | int |
VARCHAR, TEXT | str |
BOOLEAN | bool |
DATA, CARIMBO DE DATA/HORA | datetime.date , datetime.datetime |
NUMERIC | decimal.Decimal |
Como posso exportar dados do PostgreSQL para um CSV usando Python?
Você pode usar o método copy_expert()
com um comando SQL COPY:
with open('courses.csv', 'w') as f:
cur.copy_expert("COPY datacamp_courses TO STDOUT WITH CSV HEADER", f)
Isso é útil para criar backups ou exportar dados para análise.
Posso usar o Jupyter Notebook para executar esses comandos Python-PostgreSQL?
Com certeza! O psycopg2 funciona perfeitamente no Jupyter. Apenas certifique-se de que a conexão com o banco de dados seja fechada corretamente após as consultas, pois as sessões do Jupyter podem permanecer abertas e consumir recursos.
Qual é a melhor maneira de depurar as consultas SQL que falham em Python?
Você pode:
- Imprima a consulta e os parâmetros antes da execução.
- Use os logs do PostgreSQL para obter mais detalhes.
- Habilite o registro em
psycopg2
configurandoconnection.set_isolation_level()
ou usando o modo echo do SQLAlchemy se você estiver usando essa interface.

Sou analista de dados freelancer, colaborando com empresas e organizações em todo o mundo em projetos de ciência de dados. Também sou instrutor de ciência de dados com mais de 2 anos de experiência. Escrevo regularmente artigos relacionados à ciência de dados em inglês e espanhol, alguns dos quais foram publicados em sites consagrados, como DataCamp, Towards Data Science e Analytics Vidhya Como cientista de dados com formação em ciência política e direito, meu objetivo é trabalhar na interação de políticas públicas, direito e tecnologia, aproveitando o poder das ideias para promover soluções e narrativas inovadoras que possam nos ajudar a enfrentar desafios urgentes, como a crise climática. Eu me considero uma pessoa autodidata, um aprendiz constante e um firme defensor da multidisciplinaridade. Nunca é tarde demais para aprender coisas novas.