Leitura de bancos de dados com Python
Esta postagem vai falar sobre vários pacotes para trabalhar com bancos de dados usando Python . Começaremos abordando o pyodbc , que é um dos pacotes mais padrão usados para trabalhar com bancos de dados, mas também abordaremos um módulo muito útil chamado turbodbc , que permite executar consultas SQL de maneira eficiente (e geralmente mais rápido) dentro do Python .
piodbc
pyodbc pode ser instalado usando pip:
pip install pyodbc
Vamos começar escrevendo uma consulta SQL simples usando pyodbc . Para fazer isso, primeiro precisamos nos conectar a um banco de dados específico. Nos exemplos apresentados aqui, estaremos usando um banco de dados SQLite em minha máquina. No entanto, você também pode fazer isso com muitos outros sistemas de banco de dados, como SQL Server, MySQL, Oracle, etc. Na string de conexão, especificamos o driver do banco de dados (por exemplo, um dos sistemas de banco de dados mencionados), o servidor, o banco de dados nome e, potencialmente, nome de usuário / senha. Se você tiver uma configuração de conexão confiável, poderá especificá-la (como no primeiro exemplo abaixo).
import pyodbc
channel = pyodbc.connect("DRIVER={SQLite3 ODBC Driver};SERVER=localhost;DATABASE=sample_database.db;Trusted_connection=yes")
# or if using a password
channel = pyodbc.connect("DRIVER={SQLite3 ODBC Driver};SERVER=localhost;DATABASE=sample_database.db;Uid=YourUsername;Pwd=YourPassword;'")
Lendo consulta SQL com pandas
Depois de fazer a conexão, podemos escrever uma consulta SQL para recuperar dados deste banco de dados. Uma maneira de fazer isso é usar o pacote pandas . Abaixo, colocamos o código SQL entre aspas como o primeiro parâmetro de pd.read_sql . O segundo parâmetro contém nosso objeto de conexão.
import pandas as pd
pd.read_sql("select * from sample_table;", channel)
Lendo consulta SQL com pyodbc
Além de usar o pandas , podemos executar uma consulta SQL apenas com o pyodbc . Neste caso, precisamos criar um objeto cursor . Um cursor é um objeto usado para processar os resultados de uma consulta SQL.
cursor = channel.cursor()
cursor.execute("select * from sample_table;")
A seguir, podemos extrair os resultados da consulta usando o método fetchall . fetchall retorna as linhas do resultado da consulta em uma lista, em vez de um quadro de dados. Cada elemento da lista corresponde a uma linha.
rows = cursor.fetchall()
Como alternativa, podemos puxar uma linha por vez usando o método fetchone , como abaixo. Cada vez que chamamos esse método, Python retorna a próxima linha no resultado da consulta. Isso pode ser útil quando você está lidando com um grande conjunto de dados que não deseja trazer inteiramente para a memória de uma só vez.
cursor.execute("select * from sample_table;")
cursor.fetchone()
Por exemplo, aqui podemos imprimir 10 linhas, uma por uma, do conjunto de dados de resultado.
for i in range(10):
print(cursor.fetchone())
Quando terminarmos com nossa conexão de banco de dados, é uma boa ideia fechá-la, o que podemos fazer assim:
channel.close()
pypyodbc
pypyodbc é muito semelhante ao pyodbc , exceto que ele é escrito em Python puro sob o capô. Também pode ser instalado via pip.
pip install pypyodbc |
Nosso código acima pode ser executado exatamente da mesma maneira, exceto que substituímos pyodbc por pypyodbc .
import pyodbc
channel = pypyodbc.connect("DRIVER={SQLite3 ODBC Driver};SERVER=localhost;DATABASE=sample_database.db;Trusted_connection=yes")
O pypyodbc tem vários métodos que não existem atualmente no pyodbc , como a capacidade de criar arquivos de banco de dados do Access com mais facilidade.
turbodbc
Agora que analisamos o pyodbc , vamos falar sobre o turbodbc . Superficialmente, esses pacotes têm sintaxe semelhante. No entanto, a principal vantagem do turbodbc é que geralmente é mais rápido na extração de dados do que o pyodbc . Por exemplo, turbodbc usa buffers para acelerar o retorno de várias linhas. O uso de buffers, junto com NumPy no backend, combina para tornar as conversões de tipo de dados mais rápidas entre o banco de dados e os resultados do Python.
É recomendado instalar o turbodbc usando conda install , como abaixo. Isso instalará todas as dependências necessárias em diferentes plataformas. Se você não tem conda, veja aqui .
conda install -c conda-forge turbodbc
Feito isso, a próxima etapa é importar o pacote turbodbc .
import turbodbc
Semelhante aos exemplos acima, podemos nos conectar ao nosso banco de dados usando um comando de uma linha. Podemos usar a string de conexão, como anteriormente, ou especificar diretamente o DSN (“nome da fonte de dados”).
turbodbc.connect(dsn = "SQLite3 Datasource")
Após a conexão ser criada, podemos definir um objeto cursor , como fizemos anteriormente neste post.
cursor = channel.cursor()
Agora, usando a mesma sintaxe do pyodbc , podemos executar nossa mesma consulta SQL.
cursor.execute("select * from sample_table;")
Por último, vamos buscar todas as linhas usando o conhecido método fetchall.
rows = cursor.fetchall()
Conclusão
É isso para este post! Há muito mais para turbodbc e pyodbc . Em uma postagem futura, exploraremos suas funcionalidades adicionais.
Veja mais conteúdos de python clique aqui