Bora finalmente preparar as tabelas pra importar um monte de dados dos arquivos CSV. Se você tá pensando: "Mas pra que preparar tabela? Qual a dificuldade?", então ainda tem muita coisa do mundo real pra descobrir. Nenhum arquivo é "perfeito". Sempre tem um detalhe chato — seja duplicata, espaço sobrando, erro de tipo de dado ou só a estrutura não batendo.
Vamos ver como preparar o banco direitinho pra que o arquivo CSV entre sem drama.
Antes de importar o CSV, decide como os dados vão ficar guardados no banco. Ou seja, primeiro cria a tabela com a estrutura certa.
Exemplo: importando dados de estudantes
Imagina que a gente tem um arquivo CSV chamado students.csv com informações dos estudantes. O conteúdo dele é assim:
id,name,age,email,major
1,Alex,20,alex@example.com,Computer Science
2,Maria,21,maria@example.com,Mathematics
3,Otto,19,otto@example.com,Physics
Com base nisso, vamos criar a tabela:
CREATE TABLE students (
id SERIAL PRIMARY KEY, -- Identificador único do estudante
name VARCHAR(100) NOT NULL, -- Nome do estudante (string até 100 caracteres)
age INT CHECK (age > 0), -- Idade do estudante (tem que ser maior que 0)
email VARCHAR(100) UNIQUE, -- Email único
major VARCHAR(100) -- Curso principal
);
id SERIAL PRIMARY KEY: A gente colocou uma chave primária pra identificar cada linha de forma única. Se no seu CSV já tem identificador único, usa a colunaiddo arquivo.name VARCHAR(100) NOT NULL: O nome do estudante tem que estar preenchido e não pode passar de 100 caracteres.age INT CHECK (age > 0): Idade tem que ser número, e a gente coloca uma checagem pra garantir que sempre seja maior que 0.email VARCHAR(100) UNIQUE: Email tem que ser único pra não rolar registro duplicado.major VARCHAR(100): Indica o curso principal do estudante. Aqui não tem restrição.
Suas tabelas precisam ser bem pensadas pra bater com os dados e ao mesmo tempo proteger contra dados errados. Isso diminui a chance de erro na hora de importar.
Conferindo os dados antes de importar
Arquivos CSV sempre trazem surpresas. Antes de importar, garante que os dados batem com a estrutura da tabela.
Como conferir os dados?
Colunas batendo
Confere se o número de colunas no CSV é igual ao número de colunas na tabela. Por exemplo, se a tabela tem 5 colunas e o CSV tem 6, vai dar erro na importação.Tipos de dados
Checa se os dados de cada coluna são do tipo esperado. Por exemplo, na colunaagesó pode ter número inteiro.
Ferramentas pra validar
Excel ou Google Sheets. Abre o arquivo num editor de planilha e vê se não tem linha vazia ou célula com dado estranho.
Python. Usa a lib pandas pra checar os tipos de dados:
import pandas as pd
# Lendo o CSV
df = pd.read_csv('students.csv')
# Conferindo os dados
print(df.dtypes) # Mostra os tipos de dados de cada coluna
print(df.isnull().sum()) # Checa valores vazios
Limpando os dados antes de importar
Na maioria das vezes, dados de fora precisam de uma limpada. Senão, você vai acabar trombando erro na hora de importar.
Problemas comuns em arquivos CSV
Linhas ou colunas vazias
Se faltar valor numa coluna obrigatória (NOT NULL), vai dar erro.
Exemplo de dado errado:
id,name,age,email,major
1,Alex,20,alexey@example.com,Computer Science
2,Maria,,maria@example.com,Mathematics
Solução: Troca os valores vazios por algo válido. Por exemplo, coloca NULL no age vazio.
Espaços sobrando
Espaço no começo ou fim da string pode dar ruim. Por exemplo, "Alex" e "Alex" vão ser considerados diferentes.
Solução em Python: tira os espaços extras.
df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
Caracteres estranhos ou encoding errado
Se o arquivo tem caractere especial que o banco não entende, pode dar erro na importação.
Exemplo: Usa o app iconv pra converter o encoding:
iconv -f WINDOWS-1251 -t UTF-8 students.csv > students_utf8.csv
Limpando dados: exemplo em Python
import pandas as pd
# Lendo o arquivo
df = pd.read_csv('students.csv')
# Limpando os dados
df['name'] = df['name'].str.strip() # Tira espaços
df['email'] = df['email'].str.lower() # Deixa email em minúsculo
df['age'] = df['age'].fillna(0) # Preenche idade vazia com 0
df['age'] = df['age'].astype(int) # Converte idade pra inteiro
# Salva as mudanças num novo arquivo
df.to_csv('cleaned_students.csv', index=False)
Sempre confere os dados antes de importar. Lembra: programador esperto economiza tempo pegando problema antes!
Checklist útil pra preparar tabelas e dados
Antes de mexer com CSV, confere:
- A estrutura da tabela bate com os dados (colunas, tipos, restrições).
- O arquivo CSV não tem linha vazia, espaço sobrando ou caractere estranho.
- O encoding do arquivo é compatível com PostgreSQL (UTF-8 é o melhor).
- Você tá usando ferramentas pra analisar e limpar os dados (tipo Python, Excel).
Agora você tá pronto pra importar dados do CSV! Mas antes de fazer isso, garante que sua tabela tá certinha e os dados limpos. Na próxima aula a gente continua vendo como importar dados no PostgreSQL, incluindo como lidar com erro e conflito.
GO TO FULL VERSION