Banco de Dados Python
Manipulação de Banco de dados na linguagem Python. Baixe a extensão sqlite viewer.
import sqlite3
# Conectar ao banco de dados, se não existir cria
connection = sqlite3.connect("filmes.db")
# o cursor é um objeto que permite executar comandos SQL e recuperar resultados.
cursor = connection.cursor()
# CRIAR TABELA
cursor.execute(
"""
CREATE TABLE IF NOT EXISTS filmes(
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome VARCHAR(255) NOT NULL,
ano INTEGER NOT NULL,
nota REAL NOT NULL
);
"""
)
# INSERIR DADOS
cursor.execute(
"""INSERT INTO filmes (nome, ano, nota)
VALUES ('O Senhor dos Anéis', 2001, 9.5), ('O Poderoso Chefão', 1972, 9.8),
('O Poderoso Chefão II', 1974, 9.7), ('A Lista de Schindler', 1993, 9.9),
('O Silmarillion', 1977, 9.0);"""
)
# executa o comando SQL de inserção
connection.commit()
# ATUALIZAR DADOS id 1
id = 1
cursor.execute("UPDATE filmes SET nota = ? WHERE id = ?", (9.0, id))
# executa o comando SQL de atualização
connection.commit()
#EXCLUIR DADOS
id = (3,5)
cursor.execute("DELETE FROM filmes WHERE id in (?,?)", id)
# executa o comando SQL de exclusão
connection.commit()
# LER DADOS
cursor.execute("SELECT * FROM filmes;")
# Retorna uma lista de tuplas, onde cada tupla representa uma linha da tabela
filmes = cursor.fetchall()
print(filmes)
connection.close()
import psycopg2
conn = psycopg2.connect(
database = 'db_nome',
user = 'postgres',
password = '123456',
host = 'localhost',
port = '5432'
)
Conectar postgres a com a biblioteca psycopg. O CRUD é feito exatamente como o exemplo anterior, só mudando a conexão.
Assuntos Relacionados
SQLAlchemy
SQLAlchemy é uma biblioteca de Python que fornece uma abstração de banco de dados para facilitar a interação com bancos de dados relacionais. Ele permite que você escreva código Python que interage com o banco de dados de maneira eficiente e flexível, sem a necessidade de escrever consultas SQL complexas manualmente.
O ORM do SQLAlchemy permite trabalhar com o banco de dados usando classes Python, em vez de escrever SQL diretamente.
# Importação de módulos do SQLAlchemy necessários para criar a conexão com o banco de dados,
# definir as tabelas e realizar operações de banco de dados.
from sqlalchemy import create_engine, Column, Integer, String, Float
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# Criação do "engine" que define a conexão com o banco de dados.
# O parâmetro "sqlite:///banco.db" cria ou abre um banco de dados SQLite chamado "banco.db".
# O parâmetro "echo=True" imprime os comandos SQL no terminal para ajudar na depuração.
engine = create_engine("sqlite:///banco.db", echo=True)
# Criando a classe base que será usada para definir as tabelas do banco de dados.
# Isso é feito por meio da função declarative_base().
Base = declarative_base()
# Definindo a classe "Filme", que será mapeada para a tabela "filmes" no banco de dados.
# Cada instância dessa classe representará uma linha na tabela "filmes".
class Filme(Base):
# Definindo o nome da tabela no banco de dados
__tablename__ = "filmes"
# Atributos que serão mapeados para as colunas da tabela "filmes"
id = Column(Integer, primary_key=True) # Define a coluna "id" como chave primária e do tipo Integer.
nome = Column(String, nullable=False) # Define a coluna "nome" do tipo String e não permite valor nulo.
ano = Column(Integer, nullable=False) # Define a coluna "ano" do tipo Integer e não permite valor nulo.
nota = Column(Float, nullable=False) # Define a coluna "nota" do tipo Float e não permite valor nulo.
# O comando Base.metadata.create_all(engine) cria a tabela "filmes" no banco de dados, caso ela ainda não exista.
# Ele utiliza a conexão definida pelo "engine" e cria as tabelas conforme as definições das classes.
Base.metadata.create_all(engine)
# Função para adicionar um filme no banco de dados
def adiciona_filme(nome, ano, nota):
# Criando uma nova "Session", que é responsável por interagir com o banco de dados.
# A sessionmaker é uma fábrica de sessões que utiliza o engine para criar a conexão.
Session = sessionmaker(bind=engine)
session = Session() # Criando uma sessão
# Criando uma instância da classe Filme (um objeto Python) com os dados fornecidos.
filme = Filme(nome=nome, ano=ano, nota=nota)
# Adicionando o objeto "filme" à sessão, o que marca ele para ser persistido no banco de dados.
session.add(filme)
# Comitando a transação para salvar as alterações no banco de dados.
session.commit()
# Fechando a sessão após a operação.
session.close()
# Função para atualizar os dados de um filme existente
def atualiza_filme(id, nome=None, ano=None, nota=None):
# Criando a sessão novamente
Session = sessionmaker(bind=engine)
session = Session()
# Consultando o filme pelo ID (utilizando o método filter_by e pegando o primeiro resultado).
filme = session.query(Filme).filter_by(id=id).first()
# Verificando se o filme existe (caso o ID não seja encontrado, o filme será None).
if filme:
# Atualizando os dados do filme apenas se os valores forem fornecidos.
if nome is not None:
filme.nome = nome
if ano is not None:
filme.ano = ano
if nota is not None:
filme.nota = nota
# Comitando as alterações no banco de dados.
session.commit()
# Fechando a sessão após a operação.
session.close()
# Função para excluir um filme do banco de dados
def exclui_filme(id):
# Criando a sessão novamente
Session = sessionmaker(bind=engine)
session = Session()
# Consultando o filme pelo ID.
filme = session.query(Filme).filter_by(id=id).first()
# Se o filme for encontrado, ele é excluído.
if filme:
session.delete(filme) # Marca o filme para exclusão.
# Comitando a transação para efetivar a exclusão no banco de dados.
session.commit()
# Fechando a sessão após a operação.
session.close()
# Excluindo o filme com o ID 2
exclui_filme(2)