Utilizando .csv em banco de dados SQL Server
A tutorial de como utilizar pyodbc para salvar um arquivo csv no SQL Server
Para salvar um arquivo .csv utilizando python precisamos que na máquina local tenha instalado o gerenciador de banco de dados SQL Sever, caso não seja o caso faça o download da versão express (gratuita) no link: https://www.microsoft.com/pt-br/sql-server/sql-server-downloads.
Para utilizarmos python para acessar bancos de dados precisamos instalar o pyodbc
, o qual possibilita a conexão com diversos tipos de banco de dados. Para instalar é só digitar no prompt de comando pip install pyodbc
. Para maiores mais detalhes: https://pypi.org/project/pyodbc/.
#carregando os pacotes necessários
import pyodbc
import pandas as pd
import csv
Antes de mais nada precisamos conectar com o banco de dados que está instalado, o qual necessita dos seguintes dados:
- SERVER (nome do servidor);
- DATABASE (nome do seu banco de dados);
- USERNAME (nome de usuário do banco de dados);
- PASSWORD (senha do banco de dados);
- DRIVER (tipo do banco de dados).
Para estabelecer uma conexão utiliza-se o método pyodbc.connect
da seguinte forma:
pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
Para manipularmos os dados de um banco de dados utilizando uma API (Application Programming Interface), necessita-se de fazermos utilizando um cursor. Os cursores possibilitam é um objeto que aponta para uma determinada linha dentro de um conjunto, o este que irá realizar todas as operações no banco de dados.
Para declarar iniciar um cursor utiliza-se o método .cursor()
.
Obs.: Nunca deve-mos deixar de fechar o cursor após o uso.
cur = conn.cursor()
Com o cursor aberto, podemos utiliza-lo para realizarmos as consultas (queries) no banco de dados, da qual está excluindo a tabela no banco de dados com o nome Socioeconomic_chicago
se ela existir.
Observe que podemos fazer todas as consultados nos banco de dados utilizando o método execute()
, assim podemos escrever as strings
que serão utilizada para esse fim.
cur.execute('DROP TABLE IF EXISTS Socioeconomic_chicago')
Segue o link para download do arquivo .csv
utilizado:
Como não haverá mais conflito com uma tabela igual, pode-se utilizar o comando CREATE TABLE
para criar uma nova tabela.
cur.execute(''' CREATE TABLE Socioeconomic_chicago(
Community_Area_Number INT PRIMARY KEY,
COMMUNITY_AREA_NAME VARCHAR(50),
PERCENT_OF_HOUSING_CROWDED FLOAT,
PERCENT_HOUSEHOLDS_BELOW_POVERTY FLOAT,
PERCENT_AGED_16_UNEMPLOYED FLOAT,
PERCENT_AGED_25_WITHOUT_HIGH_SCHOOL_DIPLOMA FLOAT,
PERCENT_AGED_UNDER_18_OR_OVER_64 FLOAT,
PER_CAPITA_INCOME FLOAT,
HARDSHIP_INDEX INT,
)
'''
)
Declarar o caminho onde está localizado o arquivo em .csv
.
file = "C:/caminho/arquivo.csv"
Neste passo será executado um loop para percorrer todas as linhas do arquivo .csv
e gravar no banco de dados utilizando a query INSERT INTO nome_tabela (coluna1, coluna2, coluna3, ...) VALUES (valor1, valor2, valor3, ...)
.
i = 0
with open(file) as csv_file:
csv_reader = csv.reader(csv_file, delimiter = ',')
for row in csv_reader:
if i == 0:
pass
else:
try:
col1 = int(row[0])
col2 = row[1]
col3 = float(row[2])
col4 = float(row[3])
col5 = float(row[4])
col6 = float(row[5])
col7 = float(row[6])
col8 = float(row[7])
col9 = int(row[8])
except:
print('Values is broken, impossible to save in database. Code=', i)
cur.execute(''' INSERT INTO Socioeconomic_chicago (Community_Area_Number, COMMUNITY_AREA_NAME,PERCENT_OF_HOUSING_CROWDED,PERCENT_HOUSEHOLDS_BELOW_POVERTY, PERCENT_AGED_16_UNEMPLOYED,
PERCENT_AGED_25_WITHOUT_HIGH_SCHOOL_DIPLOMA,PERCENT_AGED_UNDER_18_OR_OVER_64,PER_CAPITA_INCOME,HARDSHIP_INDEX)
VALUES (?,?,?,?,?,?,?,?,?)
''',(col1, col2, col3, col4, col5, col6, col7, col8, col9))
i += 1
Pronto tabela salva no bando de dados!
Carregando todos os dados da tabela utilizando o pandas
.
df = pd.read_sql_query('''SELECT * FROM Socioeconomic_chicago''', conn)
cur.close()
df
Essa foi uma forma simples que encontrei para fazer essa tarefa, pois existem outras formas igualmente eficazes.
Powered by: Lucas Tiago