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)