1. Nessa aula vamos unir os tópicos que aprendemos até o momento para desenvolver um gerenciamento de blog.
  2. A ideia é que possamos cadastrar usuários e posts e que cada post possa ser vinculado a um único usuário.
  3. Vamos criar o arquivo conexao_sqlalchemy.py, para criar a conexão com o banco de dados via SQL Alchemy.
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base

# postgresql://usuario:senha@host/database
DATABASE_URI = ''

engine = create_engine(DATABASE_URI)

Session = sessionmaker(bind=engine)
session = Session()

Base = declarative_base()
  1. Agora vamos criar o arquivo User.py que vai possuir a lógica para inclusão de Usuários.
from conexao_sqlalchemy import Base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import relationship

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)
    posts = relationship('Post', back_populates='author')

    def __init__(self, name, email):
        self.name = name
        self.email = email
  1. Vamos criar também o arquivo Post.py, que vai gerenciar os posts em nosso programa.
from conexao_sqlalchemy import Base
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship

class Post(Base):
    __tablename__ = 'posts'

    id = Column(Integer, primary_key=True)
    title = Column(String)
    content = Column(String)
    author_id = Column(Integer, ForeignKey('users.id'))
    author = relationship('User', back_populates='posts')

    def __init__(self, title, content, author):
        self.title = title
        self.content = content
        self.author = author
  1. Agora que temos os dois módulos, vamos criar o módulo de Blog que vai possibilitar relacionar usuários com posts.
from conexao_sqlalchemy import Base, engine, session
from User import User
from Post import Post

# Cria as tabelas
Base.metadata.create_all(engine)

# Função para exibir o menu de opções
def show_menu():
    print('Menu de opções:')
    print('1. Adicionar usuário')
    print('2. Adicionar post')
    print('3. Consultar usuários e seus posts')
    print('4. Sair')

# Função para adicionar um novo usuário
def add_user():
    print('Adicionar novo usuário:')
    name = input('Nome: ')
    email = input('Email: ')
    user = User(name=name, email=email)
    session.add(user)
    session.commit()
    print('Usuário adicionado com sucesso!')

# Função para adicionar um novo post
def add_post():
    print('Adicionar novo post:')
    title = input('Título: ')
    content = input('Conteúdo: ')
    author_id = input('ID do autor: ')
    user = session.query(User).
filter_by(id=author_id).first()
    if user:
        post = Post(title=title, content=content, author=user)
        session.add(post)
        session.commit()
        print('Post adicionado com sucesso!')
    else:
        print('Usuário não encontrado!')

# Função para consultar usuários e seus posts
def query_users_posts():
    users = session.query(User).join(User.posts).
order_by(User.name).all()
    for user in users:
        print(f'User: {user.name}, Email: {user.email}')
        for post in user.posts:
            print(f' - Post: {post.title}, 
Content: {post.content}')
  1. Por último vamos construir o arquivo App.py para execução do nosso programa.
from Blog import show_menu, add_post, add_user, query_users_posts

while True:
    show_menu()
    option = input('Selecione uma opção: ')

    if option == '1':
        add_user()
    elif option == '2':
        add_post()
    elif option == '3':
        query_users_posts()

Img1.png