- Nessa aula vamos unir os tópicos que aprendemos até o momento para desenvolver um gerenciamento de blog.
- A ideia é que possamos cadastrar usuários e posts e que cada post possa ser vinculado a um único usuário.
- 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()
- 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
- 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
- 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}')
- 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()
