Gerenciando Banco de Dados SQLite3 Com Python - Parte 1 Por Regis Da Silva
Gerenciando Banco de Dados SQLite3 Com Python - Parte 1 Por Regis Da Silva
Gerenciando Banco de Dados SQLite3 Com Python - Parte 1 Por Regis Da Silva
Publicado em:
←Home
Eu separei este post em duas partes: a Parte 1 é bem elementar e objetiva, visando apresentar o básico sobre
a realização do CRUD num banco de dados SQLite3 em Python usando o terminal.
A parte 2 , num nível intermediário, usa classes e métodos mais elaborados para gerenciar o CRUD, e algumas
coisinhas a mais.
Nota: Para entender o uso de classes e métodos leia o post Introdução a Classes e Métodos em Python. E para
entender os comandos SQL e a manipulação de registros no SQLite3 leia Guia rápido de comandos SQLite3.
Obs: O campo bloqueado nós vamos inserir depois com o comando ALTER TABLE.
Como mencionado antes, esta parte será básica e objetiva. A intenção é realizar o CRUD da forma mais
simples e objetiva possível.
Exemplos
Referências
# conectando...
conn = sqlite3.connect(':memory:')
# conectando...
conn = sqlite3.connect('clientes.db')
conn = sqlite3.connect('clientes.db')
conn.close()
$ python3 01_create_db.py
$ ls *.db
# 02_create_schema.py
import sqlite3
# conectando...
conn = sqlite3.connect('clientes.db')
# definindo um cursor
cursor = conn.cursor()
$ python3 02_create_schema.py
$ sqlite3 clientes.db '.tables'
$ sqlite3 clientes.db 'PRAGMA table_info(clientes)'
Digitando sqlite3 clientes.db '.tables' você verá que a tabela foi criada.
Nota: A única diferença, caso você use Python 2 é no print, onde você deve tirar os parênteses. E no início do
arquivo é recomendável que se defina a codificação utf-8, que no caso do Python 3 já é padrão.
# 02_create_schema.py
# -*- coding: utf-8 -*-
# usando Python 2
import sqlite3
...
print 'Tabela criada com sucesso.'
# 03_create_data_sql.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
cursor.execute("""
INSERT INTO clientes (nome, idade, cpf, email, fone, cidade, uf, criado_em)
VALUES ('Aloisio', 87, '11111111111', '[email protected]', '98765-4322', 'Porto Alegre', 'RS', '2014-06-
09')
""")
cursor.execute("""
INSERT INTO clientes (nome, idade, cpf, email, fone, cidade, uf, criado_em)
VALUES ('Bruna', 21, '22222222222', '[email protected]', '21-98765-4323', 'Rio de Janeiro', 'RJ', '2014-06-
09')
""")
cursor.execute("""
INSERT INTO clientes (nome, idade, cpf, email, fone, cidade, uf, criado_em)
VALUES ('Matheus', 19, '33333333333', '[email protected]', '11-98765-4324', 'Campinas', 'SP', '2014-06-
08')
""")
# gravando no bd
conn.commit()
$ python3 03_create_data_sql.py
# 04_create_data_nrecords.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
conn.commit()
conn.close()
Observe o uso de ? isto significa que no lugar de cada ? entrará os valores da lista na sua posição respectiva.
É o que nós chamamos de parâmetros de entrada.
$ python3 04_create_data_nrecords.py
# 05_create_data_param.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
conn.commit()
conn.close()
# python 2
p_nome = raw_input('Nome: ')
...
print 'Dados inseridos com sucesso.'
$ python3 05_create_data_param.py
Nome: Regis
Idade: 35
CPF: 30020030011
Email: [email protected]
Fone: 11 9537-0000
Cidade: Sao Paulo
UF: SP
Criado em (yyyy-mm-dd): 2014-06-15
Dados inseridos com sucesso.
# 06_read_data.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
# lendo os dados
cursor.execute("""
SELECT * FROM clientes;
""")
OPEN CHAT
conn.close()
Para executar digite no terminal:
$ python3 06_read_data.py
Eis o resultado:
(1, 'Regis', 35, '00000000000', '[email protected]', '11-98765-4321', 'Sao Paulo', 'SP', '2014-06-08')
(2, 'Aloisio', 87, '11111111111', '[email protected]', '98765-4322', 'Porto Alegre', 'RS', '2014-06-09')
(3, 'Bruna', 21, '22222222222', '[email protected]', '21-98765-4323', 'Rio de Janeiro', 'RJ', '2014-06-09')
(4, 'Matheus', 19, '33333333333', '[email protected]', '11-98765-4324', 'Campinas', 'SP', '2014-06-08')
(5, 'Fabio', 23, '44444444444', '[email protected]', '1234-5678', 'Belo Horizonte', 'MG', '2014-06-09')
(6, 'Joao', 21, '55555555555', '[email protected]', '11-1234-5600', 'Sao Paulo', 'SP', '2014-06-09')
(7, 'Xavier', 24, '66666666666', '[email protected]', '12-1234-5601', 'Campinas', 'SP', '2014-06-10')
(8, 'Regis', 35, '30020030011', '[email protected]', '11 9750-0000', 'Sao Paulo', 'SP', '2014-06-15')
# 07_update_data.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
id_cliente = 1
novo_fone = '11-1000-2014'
novo_criado_em = '2014-06-11'
conn.commit()
conn.close()
$ python3 07_update_data.py
# 08_delete_data.py
import sqlite3
conn = sqlite3.connect('clientes.db')
OPEN CHAT
cursor = conn.cursor()
id_cliente = 8
conn.commit()
conn.close()
$ python3 08_delete_data.py
# 09_alter_table.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
conn.commit()
conn.close()
$ python3 09_alter_table.py
Para listar as tabelas do banco usamos o comando SELECT name FROM sqlite_master ....
Para ler o schema da tabela usamos o comando SELECT sql FROM sqlite_master ....
# 10_view_table_info.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor() OPEN CHAT
nome_tabela = 'clientes'
# obtendo informações da tabela
cursor.execute('PRAGMA table_info({})'.format(nome_tabela))
# listando as tabelas do bd
cursor.execute("""
SELECT name FROM sqlite_master WHERE type='table' ORDER BY name
""")
print('Tabelas:')
for tabela in cursor.fetchall():
print("%s" % (tabela))
print('Schema:')
for schema in cursor.fetchall():
print("%s" % (schema))
conn.close()
$ python3 10_view_table_info.py
Eis o resultado:
Colunas: ['id', 'nome', 'idade', 'cpf', 'email', 'fone', 'cidade', 'uf', 'criado_em', 'bloqueado']
Tabelas:
clientes
sqlite_sequence
Schema:
CREATE TABLE clientes (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
idade INTEGER,
cpf VARCHAR(11) NOT NULL,
email TEXT NOT NULL,
fone TEXT,
cidade TEXT,
uf VARCHAR(2) NOT NULL,
criado_em DATE NOT NULL
, bloqueado BOOLEAN)
# 11_backup.py
import sqlite3
import io
OPEN CHAT
conn = sqlite3.connect('clientes.db')
with io.open('clientes_dump.sql', 'w') as f:
for linha in conn.iterdump():
f.write('%s\n' % linha)
conn.close()
$ python3 11_backup.py
$ cat clientes_dump.sql
# 12_read_sql.py
import sqlite3
import io
conn = sqlite3.connect('clientes_recuperado.db')
cursor = conn.cursor()
f = io.open('clientes_dump.sql', 'r')
sql = f.read()
cursor.executescript(sql)
conn.close()
$ python3 12_read_sql.py
Banco de dados recuperado com sucesso.
Salvo como clientes_recuperado.db
$ sqlite3 clientes_recuperado.db 'SELECT * FROM clientes;'
Com o último comando você verá que os dados estão lá. São e salvo!!!
Leia a continuação deste artigo em Gerenciando banco de dados SQLite3 com Python - Parte 2.
Exemplos
Veja os exemplos em github.
Referências
OPEN CHAT
sqlite3 Embedded Relational Database
"Gerenciando banco de dados SQLite3 com Python - Parte 1" de "Regis da Silva" está licenciado com
uma Licença Creative Commons - Atribuição-NãoComercial-SemDerivações 4.0 Internacional.
Participe da discussão...
Nome
Curso Python asyncio: Aula 01 - Iterators Configurando OpenShift com Python 3.5 +
e Generators Flask + Gunicorn
1 comentário • 2 anos atrás 1 comentário • um ano atrás
Bernardo Gomes — Bacana a aula!! Eduardo Klosowski — Essa dica é para a versão
2 do OpenShift né? Na versão 3 teve uma
remodelação total da arquitetura do projeto e agora
OPEN CHAT