Article image
Valdemar Taborda
Valdemar Taborda08/02/2024 10:43
Compartilhe

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

    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
    Comentários (0)