Advertisement
Denjamin

inputbooks.py

May 9th, 2024 (edited)
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.09 KB | None | 0 0
  1. from sqlalchemy import create_engine, or_
  2. from sqlalchemy.orm import sessionmaker
  3.  
  4. # Тащим модельки из файла первого задания.
  5. from models import Publisher, Book, Stock, Shop, Sale
  6.  
  7. # Подключение к базе данных
  8. DATABASE_URL = "postgresql+psycopg2://postgres:619620qazwsx@localhost/books"
  9. engine = create_engine(DATABASE_URL, echo=False)
  10. Session = sessionmaker(bind=engine)
  11. session = Session()
  12.  
  13. # Получение данных от пользователя int или str
  14. publisher_input = input("Введите имя или идентификатор издателя: ")
  15.  
  16. # Делаем крутую штуку по вводным данным (except) мы однако не проходили, я его знаю из книг
  17. try:
  18.     # Преобразовать входные данные в числовой идентификатор
  19.     pub_id = int(publisher_input)
  20.     pub_filter = Publisher.id == pub_id
  21. except ValueError:
  22.     # Ввод не является числом, поэтому ищем издателя по имени
  23.     pub_filter = Publisher.name == publisher_input
  24.  
  25. publisher_query = session.query(Publisher).filter(pub_filter).one_or_none()
  26.  
  27. if publisher_query is None:
  28.     print("Издатель не найден.")
  29. else:
  30.     sales_info = session.query(Book.title, Shop.name, Sale.price, Sale.date_sale)\
  31.         .join(Stock, Stock.id_book == Book.id)\
  32.         .join(Sale, Stock.id == Sale.id_stock)\
  33.         .join(Shop, Stock.id_shop == Shop.id)\
  34.         .filter(Book.id_publisher == publisher_query.id)\
  35.         .order_by(Sale.date_sale)\
  36.         .all()
  37.  
  38.     if sales_info:  # Якобы разметка таблицы
  39.         print("Название книги | Название магазина | Стоимость | Дата покупки")
  40.         for title, shop_name, price, date_sale in sales_info:
  41.             print(f"{title} | {shop_name} | {price} | {date_sale.strftime('%d-%m-%Y')}")
  42.     else:
  43.         print("Продажи книг данного издателя не найдены.")
  44.  
  45.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement