Pysqlite
Aprendendo SQL com CRUD no SQLite usando VS Code e Jupyter Notebook¶
O que é CRUD?¶
CRUD é um acrônimo que significa Create, Read, Update e Delete. São as quatro operações básicas que você pode realizar em um banco de dados:
- Create: Criar novos registros.
- Read: Ler dados existentes.
- Update: Atualizar dados existentes.
- Delete: Deletar dados.
Configurando o Ambiente¶
1. Instalar o VS Code:
- Se você ainda não tiver, baixe e instale o VS Code do site oficial: https://code.visualstudio.com/
2. Instalar a extensão Python:
- No VS Code, vá em Extensões (ícone da engrenagem na barra lateral esquerda) e procure por "Python". Instale a extensão oficial da Microsoft.
3. Criar um novo notebook Jupyter:
Abra o VS Code e crie um novo arquivo Python (
.py
).Na primeira linha, adicione:
%matplotlib inline
Isso configura o notebook para exibir gráficos inline.
Para transformar o arquivo em um notebook, pressione Ctrl+Shift+P (ou Cmd+Shift+P no macOS) e digite "Convert to Jupyter Notebook".
4. Instalar a biblioteca sqlite3
:
Abra um terminal integrado no VS Code (Ctrl+`) e execute o seguinte comando:
pip install sqlite3
Recursos Úteis:
- Documentação do SQLite: https://www.sqlite.org/docs.html
- Documentação do Python: https://docs.python.org/3/
In [1]:
Copied!
# connect_db.py
# 01_create_db.py
import sqlite3
conn = sqlite3.connect('clientes.db')
conn.close()
# connect_db.py
# 01_create_db.py
import sqlite3
conn = sqlite3.connect('clientes.db')
conn.close()
In [2]:
Copied!
# 02_create_schema.py
import sqlite3
# conectando...
conn = sqlite3.connect('clientes.db')
# definindo um cursor
cursor = conn.cursor()
# criando a tabela (schema)
cursor.execute("""
CREATE TABLE clientesss (
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
);
""")
print('Tabela criada com sucesso.')
# desconectando...
conn.close()
# 02_create_schema.py
import sqlite3
# conectando...
conn = sqlite3.connect('clientes.db')
# definindo um cursor
cursor = conn.cursor()
# criando a tabela (schema)
cursor.execute("""
CREATE TABLE clientesss (
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
);
""")
print('Tabela criada com sucesso.')
# desconectando...
conn.close()
--------------------------------------------------------------------------- OperationalError Traceback (most recent call last) Cell In[2], line 10 7 cursor = conn.cursor() 9 # criando a tabela (schema) ---> 10 cursor.execute(""" 11 CREATE TABLE clientesss ( 12 id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 13 nome TEXT NOT NULL, 14 idade INTEGER, 15 cpf VARCHAR(11) NOT NULL, 16 email TEXT NOT NULL, 17 fone TEXT, 18 cidade TEXT, 19 uf VARCHAR(2) NOT NULL, 20 criado_em DATE NOT NULL 21 ); 22 """) 24 print('Tabela criada com sucesso.') 25 # desconectando... OperationalError: table clientesss already exists
In [3]:
Copied!
# 03_create_data_sql.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
# inserindo dados na tabela
cursor.execute("""
INSERT INTO clientesss (nome, idade, cpf, email, fone, cidade, uf, criado_em)
VALUES ('Regis', 35, '00000000000', 'regis@email.com', '11-98765-4321', 'Sao Paulo', 'SP', '2014-06-08')
""")
cursor.execute("""
INSERT INTO clientesss (nome, idade, cpf, email, fone, cidade, uf, criado_em)
VALUES ('Aloisio', 87, '11111111111', 'aloisio@email.com', '98765-4322', 'Porto Alegre', 'RS', '2014-06-09')
""")
cursor.execute("""
INSERT INTO clientesss (nome, idade, cpf, email, fone, cidade, uf, criado_em)
VALUES ('Bruna', 21, '22222222222', 'bruna@email.com', '21-98765-4323', 'Rio de Janeiro', 'RJ', '2014-06-09')
""")
cursor.execute("""
INSERT INTO clientesss (nome, idade, cpf, email, fone, cidade, uf, criado_em)
VALUES ('Matheus', 19, '33333333333', 'matheus@email.com', '11-98765-4324', 'Campinas', 'SP', '2014-06-08')
""")
# gravando no bd
conn.commit()
print('Dados inseridos com sucesso.')
conn.close()
# 03_create_data_sql.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
# inserindo dados na tabela
cursor.execute("""
INSERT INTO clientesss (nome, idade, cpf, email, fone, cidade, uf, criado_em)
VALUES ('Regis', 35, '00000000000', 'regis@email.com', '11-98765-4321', 'Sao Paulo', 'SP', '2014-06-08')
""")
cursor.execute("""
INSERT INTO clientesss (nome, idade, cpf, email, fone, cidade, uf, criado_em)
VALUES ('Aloisio', 87, '11111111111', 'aloisio@email.com', '98765-4322', 'Porto Alegre', 'RS', '2014-06-09')
""")
cursor.execute("""
INSERT INTO clientesss (nome, idade, cpf, email, fone, cidade, uf, criado_em)
VALUES ('Bruna', 21, '22222222222', 'bruna@email.com', '21-98765-4323', 'Rio de Janeiro', 'RJ', '2014-06-09')
""")
cursor.execute("""
INSERT INTO clientesss (nome, idade, cpf, email, fone, cidade, uf, criado_em)
VALUES ('Matheus', 19, '33333333333', 'matheus@email.com', '11-98765-4324', 'Campinas', 'SP', '2014-06-08')
""")
# gravando no bd
conn.commit()
print('Dados inseridos com sucesso.')
conn.close()
Dados inseridos com sucesso.
In [4]:
Copied!
# 04_read_data.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
# lendo os dados
cursor.execute("""
SELECT * FROM clientes;
""")
for linha in cursor.fetchall():
print(linha)
conn.close()
# 04_read_data.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
# lendo os dados
cursor.execute("""
SELECT * FROM clientes;
""")
for linha in cursor.fetchall():
print(linha)
conn.close()
--------------------------------------------------------------------------- OperationalError Traceback (most recent call last) Cell In[4], line 8 5 cursor = conn.cursor() 7 # lendo os dados ----> 8 cursor.execute(""" 9 SELECT * FROM clientes; 10 """) 12 for linha in cursor.fetchall(): 13 print(linha) OperationalError: no such table: clientes
In [5]:
Copied!
# 05_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'
# alterando os dados da tabela
cursor.execute("""
UPDATE clientesss
SET fone = ?, criado_em = ?
WHERE id = ?
""", (novo_fone, novo_criado_em, id_cliente))
conn.commit()
print('Dados atualizados com sucesso.')
conn.close()
# 05_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'
# alterando os dados da tabela
cursor.execute("""
UPDATE clientesss
SET fone = ?, criado_em = ?
WHERE id = ?
""", (novo_fone, novo_criado_em, id_cliente))
conn.commit()
print('Dados atualizados com sucesso.')
conn.close()
Dados atualizados com sucesso.
In [6]:
Copied!
# 07_delete_data.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
id_cliente = 3
# excluindo um registro da tabela
cursor.execute("""
DELETE FROM clientesss
WHERE id = ?
""", (id_cliente,))
conn.commit()
print('Registro excluido com sucesso.')
conn.close()
# 07_delete_data.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
id_cliente = 3
# excluindo um registro da tabela
cursor.execute("""
DELETE FROM clientesss
WHERE id = ?
""", (id_cliente,))
conn.commit()
print('Registro excluido com sucesso.')
conn.close()
Registro excluido com sucesso.
In [7]:
Copied!
# 09_alter_table.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
# adicionando uma nova coluna na tabela clientes
cursor.execute("""
ALTER TABLE clientesss
ADD COLUMN bloqueado BOOLEAN;
""")
conn.commit()
print('Novo campo adicionado com sucesso.')
conn.close()
# 09_alter_table.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
# adicionando uma nova coluna na tabela clientes
cursor.execute("""
ALTER TABLE clientesss
ADD COLUMN bloqueado BOOLEAN;
""")
conn.commit()
print('Novo campo adicionado com sucesso.')
conn.close()
--------------------------------------------------------------------------- OperationalError Traceback (most recent call last) Cell In[7], line 8 5 cursor = conn.cursor() 7 # adicionando uma nova coluna na tabela clientes ----> 8 cursor.execute(""" 9 ALTER TABLE clientesss 10 ADD COLUMN bloqueado BOOLEAN; 11 """) 13 conn.commit() 15 print('Novo campo adicionado com sucesso.') OperationalError: duplicate column name: bloqueado
In [8]:
Copied!
# 10_view_table_info.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
nome_tabela = 'clientesss'
# obtendo informações da tabela
cursor.execute('PRAGMA table_info({})'.format(nome_tabela))
colunas = [tupla[1] for tupla in cursor.fetchall()]
print('Colunas:', colunas)
# ou
# for coluna in colunas:
# print(coluna)
# 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))
# obtendo o schema da tabela
cursor.execute("""
SELECT sql FROM sqlite_master WHERE type='table' AND name=?
""", (nome_tabela,))
print('Schema:')
for schema in cursor.fetchall():
print("%s" % (schema))
conn.close()
# 10_view_table_info.py
import sqlite3
conn = sqlite3.connect('clientes.db')
cursor = conn.cursor()
nome_tabela = 'clientesss'
# obtendo informações da tabela
cursor.execute('PRAGMA table_info({})'.format(nome_tabela))
colunas = [tupla[1] for tupla in cursor.fetchall()]
print('Colunas:', colunas)
# ou
# for coluna in colunas:
# print(coluna)
# 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))
# obtendo o schema da tabela
cursor.execute("""
SELECT sql FROM sqlite_master WHERE type='table' AND name=?
""", (nome_tabela,))
print('Schema:')
for schema in cursor.fetchall():
print("%s" % (schema))
conn.close()
Colunas: ['id', 'nome', 'idade', 'cpf', 'email', 'fone', 'cidade', 'uf', 'criado_em', 'bloqueado'] Tabelas: clientesss sqlite_sequence Schema: CREATE TABLE clientesss ( 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)