⚓ SQLAlchemy Cheat Sheet

📖 Site oficial do SQLAlchemy (Documentação)

# Comando / Função O que faz Exemplo
1create_engine()Cria a conexão principal com o bancoengine = create_engine('sqlite:///db.sqlite')
2declarative_base()Classe base para modelos ORMBase = declarative_base()
3sessionmaker()Fábrica de sessões para transaçõesSession = sessionmaker(bind=engine)
4Base.metadata.create_all()Cria todas as tabelas no banco de dadosBase.metadata.create_all(engine)
5engine.connect()Abre uma conexão de baixo nível (Core)with engine.connect() as conn:
6Column()Define uma coluna na tabelaname = Column(String(50))
7IntegerTipo de dado: Inteiroid = Column(Integer, primary_key=True)
8String()Tipo de dado: Texto com limiteemail = Column(String(100), unique=True)
9FloatTipo de dado: Ponto flutuanteprice = Column(Float)
10BooleanTipo de dado: Booleanois_active = Column(Boolean)
11DateTimeTipo de dado: Data e Horacreated_at = Column(DateTime)
12ForeignKey()Define chave estrangeirauser_id = Column(ForeignKey('users.id'))
13relationship()Cria relação entre objetos ORMposts = relationship("Post", backref="author")
14primary_key=TrueDefine coluna como chave primáriaid = Column(Integer, primary_key=True)
15nullable=FalseDefine que o campo é obrigatórioname = Column(String, nullable=False)
16default=Define valor padrão para a colunastatus = Column(String, default='pending')
17session.add()Adiciona um objeto à sessãosession.add(novo_usuario)
18session.add_all()Adiciona lista de objetossession.add_all([u1, u2])
19session.commit()Confirma as alterações no bancosession.commit()
20session.rollback()Reverte alterações não confirmadassession.rollback()
21session.delete()Marca um objeto para exclusãosession.delete(usuario)
22session.query()Inicia uma consulta ORMsession.query(User).all()
23session.refresh()Atualiza objeto com dados do bancosession.refresh(objeto)
24session.close()Fecha a sessão manualsession.close()
25.all()Retorna todos os resultados como listaquery.all()
26.first()Retorna apenas o primeiro resultadoquery.first()
27.one()Retorna exatamente um ou erroquery.one()
28.get()Busca pela chave primáriasession.query(User).get(1)
29.filter()Filtra resultados (expressões SQL)query.filter(User.age > 18)
30.filter_by()Filtra por argumentos nomeadosquery.filter_by(name='Joao')
31.order_by()Ordena os resultadosquery.order_by(User.name.desc())
32.limit()Limita o número de resultadosquery.limit(10)
33.offset()Pula N resultados (paginação)query.offset(20)
34.count()Conta o número de registrosquery.count()
35.join()Realiza um INNER JOINquery.join(Post)
36.outerjoin()Realiza um LEFT OUTER JOINquery.outerjoin(Post)
37and_()Operador lógico Efilter(and_(cond1, cond2))
38or_()Operador lógico OUfilter(or_(cond1, cond2))
39not_()Operador lógico NÃOfilter(not_(User.id == 1))
40.like()Busca padrão (case sensitive)User.name.like('%Ana%')
41.ilike()Busca padrão (case insensitive)User.name.ilike('%ana%')
42.in_()Verifica se valor está na listaUser.id.in_([1, 2, 3])
43.is_()Compara com NULL ou BooleanosUser.email.is_(None)
44.between()Intervalo de valoresUser.age.between(20, 30)
45func.count()Função SQL COUNTsession.query(func.count(User.id))
46func.sum()Função SQL SUMsession.query(func.sum(Order.total))
47func.avg()Função SQL AVG (Média)session.query(func.avg(User.age))
48.group_by()Agrupamento de registrosquery.group_by(User.city)
49.having()Filtro pós-agrupamentoquery.having(func.count() > 5)
50Table()Define tabela no estilo CoreTable('name', metadata, ...)
51select()Instrução SELECT (Core)select([users_table])
52insert()Instrução INSERT (Core)users_table.insert().values(name='X')
53update()Instrução UPDATE (Core)update(User).where(id=1).values(name='Y')
54text()Executa SQL puro (string) safelysession.execute(text("SELECT * FROM u"))
55alias()Cria um apelido para tabelau_alias = User.alias()
56lazy='select'Carregamento padrão (sob demanda)relationship(..., lazy='select')
57lazy='joined'Eager loading (usa JOIN)relationship(..., lazy='joined')
58lazy='dynamic'Retorna query em vez de listarelationship(..., lazy='dynamic')
59joinedload()Carregamento otimizado de relaçõesquery.options(joinedload(User.posts))
60back_populatesSincroniza relações bidirecionaisback_populates="owner"
61cascadeDefine comportamento de exclusãocascade="all, delete-orphan"
62Index()Cria índice em colunasIndex('idx_name', User.name)
63UniqueConstraintGarante unicidade em múltiplas colunasUniqueConstraint('a', 'b')
64CheckConstraintValidação a nível de bancoCheckConstraint('age > 0')
65EnumTipo de coluna enumeradaColumn(Enum('admin', 'user'))
66BigIntegerInteiro de 64 bitsColumn(BigInteger)
67TextCampos de texto longo (CLOB)Column(Text)
68NumericPrecisão decimal exataColumn(Numeric(10, 2))
69inspect()Inspeciona estados de objetosinspect(usuario).persistent
70distinct()Remove duplicatas da querysession.query(User.city).distinct()
71LabelDá nome a uma coluna calculada(User.age * 2).label('double_age')
72union()Une dois resultados de queryq1.union(q2)
73scalar()Retorna o primeiro valor da primeira linhaquery.scalar()
74execution_options()Configurações de execuçãostream_results=True
75engine.dispose()Fecha o pool de conexõesengine.dispose()
76MetaData()Coleção de definições de tabelasmetadata = MetaData()
77Sequence()Gera sequências numéricasColumn(Integer, Sequence('id_seq'))
78JSONSuporte a colunas JSONColumn(JSON)
79ARRAYSuporte a arrays (PostgreSQL)Column(ARRAY(Integer))
80synonym()Cria um apelido para atributosynonym('_name', descriptor=name)
81hybrid_propertyAtributos que funcionam em Python/SQL@hybrid_property
82scoped_sessionThread-local session containersession = scoped_session(...)
83yield_per(n)Carrega registros em lotes de Nquery.yield_per(100)
84subquery()Transforma query em subconsultasub = query.subquery()
85exists()Cláusula EXISTS em filtrosquery.filter(exists().where(...))
86any_()Coleção contém elemento (Postgres)Column.any(value)
87all_()Todos elementos da coleção (Postgres)Column.all(value)
88desc()Ordenação decrescenteUser.id.desc()
89asc()Ordenação crescenteUser.id.asc()
90nullsfirst()Coloca nulos no inícioUser.name.nullsfirst()
91nullslast()Coloca nulos no fimUser.name.nullslast()
92values()Extrai apenas valores específicosquery.values(User.name)
93params()Passa parâmetros para query text()query.params(id=10)