Como usar o módulo sqlite3 em Python 3

o autor selecionou o COVID-19 Relief Fund para receber uma doação como parte do programa Write for DOnations.

Introduction

SQLite is a self-contained, file-based SQL database. SQLite vem junto com Python e pode ser usado em qualquer um de seus aplicativos Python sem ter que instalar qualquer software adicional.

neste tutorial, vamos passar pelo módulo sqlite3 no Python 3., Vamos criar uma conexão a um banco de dados SQLite, adicionar uma tabela a esse banco de Dados, inserir dados nessa tabela, e ler e modificar dados nessa tabela.para este tutorial, vamos trabalhar principalmente com um inventário de peixes que precisamos modificar à medida que os peixes são adicionados ou removidos de um aquário fictício.

pré-requisitos

para tirar o máximo partido deste tutorial, recomenda-se ter alguma familiaridade com a programação em Python e algum fundo básico com SQL.,

Você pode rever estes tutoriais para as necessárias informações de plano de fundo:

  • Como o Código em Python3
  • Uma Introdução para Consultas MySQL

Passo 1 — Criar uma Conexão para um Banco de dados SQLite

Quando nós se conectar a um banco de dados SQLite, estamos acessando dados que, em última análise, reside em um arquivo de nosso computador. Bases de dados SQLite são totalmente caracterizados motores SQL que podem ser usados para muitos propósitos. Por agora, vamos considerar uma base de dados que rastreie o inventário de peixes num aquário fictício.,

Nós pode se conectar a um banco de dados SQLite usando o Python sqlite3 módulo:

import sqlite3connection = sqlite3.connect("aquarium.db")

import sqlite3 dá o nosso programa Python acesso a sqlite3 módulo. A função sqlite3.connect() devolve um Connection objecto que utilizaremos para interagir com a base de dados SQLite guardada no ficheiro aquarium.db. aquarium.db arquivo é criado automaticamente pelo sqlite3.connect() se aquarium.db já não existe em nosso computador.,

podemos verificar que nós criado com êxito o nosso connection objeto executando:

print(connection.total_changes)

Se executar este código Python, vamos ver o resultado como:

Output
0

connection.total_changes é o número total de linhas do banco de dados que tenham sido alterados por connection. Uma vez que ainda não executámos nenhum comando SQL, 0 total_changes está correcto.

Se, a qualquer momento, descobrirmos que queremos iniciar este tutorial novamente, podemos excluir o arquivo aquarium.db do nosso computador.,

Nota: também é possível se conectar a um banco de dados SQLite que reside estritamente na memória (e não em um arquivo), passando a seqüência de caracteres especiais ":memory:" dentro de sqlite3.connect(). Por exemplo, sqlite3.connect(":memory:"). A base de dados ":memory:" SQLite desaparecerá assim que o seu programa Python sair. Isto pode ser conveniente se você quiser uma caixa de areia temporária para experimentar algo no SQLite, e não precisa persistir quaisquer dados após a saída do seu programa.,

Step 2 — Adicionando dados à base de dados SQLite

Agora que temos conectado ao aquarium.db SQLite database, podemos começar a inserir e ler dados a partir dele.

numa base de dados SQL, os dados são armazenados nas tabelas. As tabelas definem um conjunto de colunas, e contêm 0 ou mais linhas com dados para cada uma das colunas definidas., uma tabela com o nome fish que acompanha os seguintes dados:

nome espécie tank_number
Sammy tubarão 1
Jamie choco 7

fish tabela irá controlar um valor de name species e tank_number para cada peixe no aquário., Two example fish rows are listed: one row for a shark named Sammy, and one row for a cuttlefish named Jamie.

We can create this fish table in SQLite using the connection we made in Step 1:

cursor = connection.cursor()cursor.execute("CREATE TABLE fish (name TEXT, species TEXT, tank_number INTEGER)")

connection.cursor() returns a Cursor object. Cursor objects allow us to send SQL statements to a SQLite database using cursor.execute()., "CREATE TABLE fish ..." string é uma instrução de SQL que cria uma tabela chamada fish com três colunas descritas anteriormente: name do tipo TEXT, espécies do tipo TEXT e tank_number do tipo INTEGER.,

Agora que temos criado uma tabela podemos inserir linhas de dados em que:

cursor.execute("INSERT INTO fish VALUES ('Sammy', 'shark', 1)")cursor.execute("INSERT INTO fish VALUES ('Jamie', 'cuttlefish', 7)")

Nós chamamos de cursor.execute() duas vezes: uma vez para inserir uma linha para o tubarão Sammy tanque 1 e uma vez para inserir uma linha para o choco Jamie tanque 7. "INSERT INTO fish VALUES ..." é uma declaração SQL que nos permite adicionar linhas a uma tabela.,

na próxima secção, utilizaremos uma declaração SQL

para inspeccionar as linhas que acabámos de inserir na nossa tabelafish.

Passo 3 — Leitura de dados da Base de dados SQLite

No Passo 2, adicionámos duas linhas a uma tabela SQLite chamada fish., Podemos recuperar as linhas usando um SELECT instrução de SQL:

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

Se executar este código, vamos ver uma saída semelhante ao seguinte:

Output

cursor.execute() função executa um SELECT instrução para obter valores para o name species e tank_number colunas fish tabela. fetchall()recupera todos os resultados da declaração deSELECT., When we we see a list of two tuples. Cada tupla tem três entradas; uma entrada para cada coluna que selecionamos a partir do fish tabela. As duas tuplas têm os dados que introduziu no Passo 2: uma tupla para Sammy shark, e uma tupla para Jamie cuttlefish.,

Se a gente queria recuperar linhas fish tabela que correspondem a um conjunto de critérios específicos, podemos usar uma WHERE cláusula:

Se fizermos isso, vamos ver uma saída semelhante ao seguinte:

Output

Como no exemplo anterior, cursor.execute(<SQL statement>).fetchall() permite-nos obter todos os resultados de uma SELECT instrução. The WHERE clause in the SELECT statement filters for rows where the value of is target_fish_name., Notice that we use ?to substitute ourtarget_fish_namevariable into theSELECT. Esperamos corresponder apenas a uma linha, e na verdade só vemos a linha para Jamie o cuttlefish devolvido.

AVISO: Nunca use operações de string em Python para criar dinamicamente uma string de instrução SQL. Usar as operações de texto em Python para montar um texto de declaração SQL deixa-o vulnerável aos ataques de injeção em SQL. Ataques de injeção SQL podem ser usados para roubar, alterar ou modificar dados armazenados em seu banco de dados., Use sempre o ID

substituição nas suas declarações SQL para substituir dinamicamente os valores do seu programa Python. Passar uma tupla de valores como o segundo argumento paraCursor.execute()para ligar os seus valores à declaração SQL. Este padrão de substituição é demonstrado aqui e em outras partes deste tutorial também.

Step 4 — Modifying Data in the SQLite Database

Rows in a SQLite database can be modified usingUPDATE andDELETE SQL statements.,digamos, por exemplo, que Sammy the shark foi transferido para o tanque número 2. Nós pode alterar Sammy linha fish tabela para refletir essa alteração:

a UPDATE instrução SQL para alterar o tank_number de Sammy para o novo valor de 2. WHERE cláusula UPDATE instrução garante que apenas altere o valor de tank_number se uma fileira tem name = "Sammy".,

Se a gente execute o seguinte SELECT instrução, podemos confirmar a nossa atualização foi feita corretamente:

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

Se fizermos isso, vamos ver uma saída semelhante ao seguinte:

Output

Observe que a linha Sammy agora tem o valor de 2 para o seu tank_number coluna.digamos que Sammy, o tubarão, foi libertado na natureza e já não está preso no aquário., Uma vez que Sammy não vive mais no aquário, faria sentido remover o Sammy row do fish table.

o Problema de uma DELETE instrução SQL para remover uma linha:

released_fish_name = "Sammy"cursor.execute( "DELETE FROM fish WHERE name = ?", (released_fish_name,))

oferecemos uma DELETE instrução de SQL para remover a linha Sammy shark. The WHERE clause in the DELETE ensured we only delete a row if that row has name = "Sammy".,

Se a gente execute o seguinte SELECT instrução, podemos confirmar a nossa eliminação foi feita corretamente:

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

Se executar este código, vamos ver uma saída semelhante ao seguinte:

Output

Observe que a linha Sammy shark agora é ido, e só Jamie cuttlefish permanece.,

Passo 5 — Utilizar com Instruções Para Limpeza Automática

neste tutorial, usamos dois principais objetos para interagir com o "aquarium.db" banco de dados SQLite: Connection objeto chamado connection e uma Cursor objeto chamado cursor.

da mesma forma que os arquivos Python devem ser fechados quando terminarmos de trabalhar com eles, os objetos Connection e Cursor os objetos também devem ser fechados quando já não são necessários.,

podemos usar uma with instrução para nos ajudar a automaticamente fechar Connection e Cursor objetos:

closing é uma função de conveniência fornecida pela contextlib módulo. Quando uma with instrução sai, closing assegura que close() é chamado em qualquer objeto que é passado para ele. A função closing é usada duas vezes neste exemplo., De uma vez para garantir que o Connection objeto retornado por sqlite3.connect() é automaticamente fechada, e uma segunda vez para garantir que o Cursor objeto retornado por connection.cursor() é automaticamente fechada.,

Se executar este código, vamos ver uma saída semelhante ao seguinte:

Output

Desde "SELECT 1" é uma instrução de SQL que sempre retorna uma única linha com uma coluna única, com um valor de 1 faz sentido ver uma única tupla com 1 como seu único valor retornado pelo nosso código.

Conclusion

The sqlite3 module is a powerful part of the Python standard library; it lets us work with a fully featured on-disk SQL database without installing any additional software.,

neste tutorial, aprendemos a usar o módulo sqlite3 para conectar a um banco de dados SQLite, adicionar dados a esse banco de dados, bem como ler e modificar dados nesse banco de dados. Ao longo do caminho, nós também aprendemos sobre os riscos de ataques de injeção de SQL e como usar contextlib.closing automaticamente chamada de close() em Python objetos with instruções.a partir daqui podemos aprender mais sobre bases de dados SQL em SQLite vs MySQL vs PostgreSQL: uma comparação de Sistemas de gerenciamento de banco de Dados Relacionais.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Ir para a barra de ferramentas