Psycopg2: Guia completo para trabalhar com PostgreSQL em Python
Introdução
PostgreSQL é um poderoso sistema de gerenciamento de banco de dados relacional de código aberto, conhecido por sua confiabilidade, escalabilidade e suporte a tipos de dados complexos. Para trabalhar com PostgreSQL a partir do Python, a ferramenta mais popular e confiável é o Psycopg2 — o driver síncrono oficial que oferece uma solução estável e de alto desempenho para conectar-se ao banco de dados, executar consultas SQL, gerenciar transações e integrar-se com frameworks web.
O Psycopg2 é o padrão de facto para trabalhar com PostgreSQL em projetos Python, graças à sua maturidade, completeza funcional e suporte ativo da comunidade de desenvolvedores.
O que é Psycopg2
Psycopg2 é um adaptador Python para PostgreSQL, escrito em linguagem C utilizando a libpq (a biblioteca cliente oficial do PostgreSQL). A biblioteca oferece conformidade total com a especificação DB-API 2.0 e fornece diversos recursos adicionais específicos do PostgreSQL.
Principais características do Psycopg2:
- Alta performance: Graças à implementação em C e à interação otimizada com a libpq
- Segurança: Proteção integrada contra injeção de SQL através de consultas parametrizadas
- Suporte a transações: Controle total sobre transações com gerenciamento automático
- Compatibilidade de tipos de dados: Conversão automática entre tipos PostgreSQL e Python
- Suporte a extensões: Trabalhe com JSON, UUID, arrays, hstore e outros tipos de dados do PostgreSQL
- Thread-safe: Possibilidade de uso em aplicações multi-thread
Instalação e configuração
Instalação da biblioteca
pip install psycopg2-binary
Para ambientes de produção, recomenda-se usar a versão completa:
pip install psycopg2
Requisitos de sistema
Antes de instalar, verifique se as dependências necessárias estão instaladas no sistema:
Ubuntu/Debian:
sudo apt-get install libpq-dev python3-dev
CentOS/RHEL:
sudo yum install postgresql-devel python3-devel
macOS:
brew install postgresql
Conexão com o banco de dados
Conexão básica
import psycopg2
# Conectando ao PostgreSQL
conn = psycopg2.connect(
dbname="mydb",
user="postgres",
password="password",
host="localhost",
port="5432"
)
# Criando um cursor
cur = conn.cursor()
Conexão via string de conexão
conn = psycopg2.connect("postgresql://user:password@localhost:5432/dbname")
Conexão com parâmetros adicionais
conn = psycopg2.connect(
dbname="mydb",
user="postgres",
password="password",
host="localhost",
port="5432",
sslmode="require",
connect_timeout=10,
application_name="my_app"
)
Usando gerenciadores de contexto
import psycopg2
from contextlib import contextmanager
@contextmanager
def get_db_connection():
conn = psycopg2.connect(
dbname="mydb",
user="postgres",
password="password",
host="localhost"
)
try:
yield conn
finally:
conn.close()
# Utilização
with get_db_connection() as conn:
with conn.cursor() as cur:
cur.execute("SELECT * FROM users")
results = cur.fetchall()