image

Bootcamps ilimitados + curso de inglês para sempre

80
%OFF
Article image
Valdemar Taborda
Valdemar Taborda08/02/2024 10:43
Compartilhe
Microsoft 50 Anos - Prompts InteligentesRecomendados para vocêMicrosoft 50 Anos - Prompts Inteligentes

Primeiros Passos PyCharm com sqlalchemy - "Fica Dica Não Desista Com Falhas Aprenda Com Elas"

  • #Python
  • #SQLite

Bom Dia Rede!

Primeiros Passos PyCharm com sqlalchemy, após vários conflitos e pesquisas consegui rodar com sucesso.

Falhas como:

Utilizar função select estava dando conflito tive renomear para sql_select ai Ficou show.

Após algumas falhas optei em utilizar método __init__ para definir uma correta relação.

Demorei achar mais uma boa pesquisa rodou bem.

"Fica Dica Não Desista Com Falhas Aprenda Com Elas"

Segue Código:

from sqlalchemy.orm import declarative_base, relationship, Session
from sqlalchemy import Column, create_engine, inspect, select as sql_select
from sqlalchemy import Integer, String, ForeignKey

Base = declarative_base()
engine = create_engine('sqlite:///:memory:', echo=True)

class User(Base):
  __tablename__ = "user_account"
  id = Column(Integer, primary_key=True)
  name = Column(String)
  fullname = Column(String)

  def __init__(self, name, fullname, address=None):
      self.name = name
      self.fullname = fullname
      self.address = address or []

  # RELACIONAMENTO
  address = relationship("Address", back_populates="user", cascade="all, delete-orphan")

  def __repr__(self):
      return f"User(id={self.id}, name={self.name}, fullname={self.fullname})"

class Address(Base):
  __tablename__ = "address"
  id = Column(Integer, primary_key=True)
  email_address = Column(String(30), nullable=False)
  user_id = Column(Integer, ForeignKey("user_account.id"), nullable=False)

  user = relationship("User", back_populates="address")

  def __repr__(self):
      return f"Address(id={self.id}, email_address={self.email_address})"

# CONEXAO COM O BANCO DE DADOS
engine = create_engine("sqlite:///:memory:")

# CRIANDO AS CLASSES COMO TABELA NO BANCO DE DADOS
Base.metadata.create_all(engine)

# INVESTIGA O ESQUEMA DE BANCO DE DADOS
inspector_engine = inspect(engine)
print(inspector_engine.has_table("user_account"))
print(inspector_engine.get_table_names())
print(inspector_engine.default_schema_name)

# SEÇÃO PARA DEIXAR O CÓDIGO MAIS LIMPO
session = Session(engine)

# VARIAVEL VALDEMAR COMO USUARIO
valdemar = User(
  name='valdemar',
  fullname='Valdemar Teider',
  address=[Address(email_address='valdemar@gmail.com')]
)

frank = User(
  name='frank',
  fullname='Frank Teider',
  address=[
      Address(email_address='frank@gmail.com'),
      Address(email_address='franktt@gmail.com')
  ]
)

daniela = User(name='daniela', fullname='Daniela Teider')

# enviando para o BD (persistencia de dados)
session.add_all([valdemar, frank, daniela])
session.commit()


# Consulta para a tabela User
stmt_user = sql_select(User).where(User.name.in_(["valdemar", "frank", "daniela"]))
print('Recuperando usuários a partir de condição de filtragem')
for user in session.scalars(stmt_user):
  print(user)

# Consulta para a tabela Address
stmt_address = sql_select(Address).where(Address.user_id.in_([2]))
print('\nRecuperando os endereços de email de Frank')
for address in session.execute(stmt_address):
  print(address)

# Consulta para a tabela User ordenada pelo campo fullname
order_stmt = sql_select(User).order_by(User.fullname)
print("\nRecuperando info de maneira ordenada")
for result in session.execute(order_stmt):
  print(result)

# Consulta para a tabela User Desordenada pelo campo fullname
order_stmt1 = sql_select(User).order_by()
print("\nRecuperando info de maneira Desordenada")
for result1 in session.execute(order_stmt1):
  print(result1)
Compartilhe
Recomendados para você
Suzano - Python Developer
BairesDev - Machine Learning Practitioner
Santander - Cibersegurança #2
Comentários (0)
Recomendados para vocêMicrosoft 50 Anos - Prompts Inteligentes