def get_cats_to_web(attr, limit, offset, direction): """ Возвращает список словарей с результатом запроса к таблице cats с параметрами :param attr: столбец сортировки, по умолчанию сортировка не производится :param limit: количество выводимых строк, по умолчанию - все :param offset: номер строки, с которой начинается отсчет :param direction: направление сортировки, по умолчанию - по возврастанию :return: [{'name': ..., 'color': ..., 'tail_length': ..., 'whiskers_length': ...}] """ session = create_session() if direction == 'desc': query = session.query(Cat).order_by(getattr(Cat, attr).desc() if attr else None)\ .offset(offset)\ .limit(limit) else: query = session.query(Cat).order_by(getattr(Cat, attr) if attr else None)\ .offset(offset)\ .limit(limit) cats = [] for i in query: cats.append({ 'name': i.name, 'color': i.color, 'tail_length': i.tail_length, 'whiskers_length': i.whiskers_length }) return cats
def compute_whiskers_length_mean(): """ Добавляет или обновляет значение whiskers_length_mean в таблице cats_stat """ session = create_session() avg = round(session.query(sqla.func.avg(Cat.whiskers_length)).scalar(), 1) update_statistics('whiskers_length_mean', avg)
def get_names_list(): """ Возвращает список имен из таблицы cats """ session = create_session() query = session.query(Cat.name) return [i.name for i in query]
def compute_whiskers_length_mode(): """ Добавляет или обновляет значение моды whiskers_length_mode в таблице cats_stat """ session = create_session() query = session.query(Cat.whiskers_length) whiskers_length_list = [x.whiskers_length for x in query] mode = find_list_mode(whiskers_length_list) update_statistics('whiskers_length_mode', mode)
def compute_whiskers_length_median(): """ Добавляет или обновляет значение медианы whiskers_length_median в таблице cats_stat """ session = create_session() query = session.query(Cat.whiskers_length).order_by(Cat.whiskers_length) query_list = [x.whiskers_length for x in query] median = find_list_median(query_list) update_statistics('whiskers_length_median', median)
def get_colors(width=20): """ Выводит на экран содержимое таблицы cat_colors_info с сортировкой по убыванию :param width: ширина колонки в символах, по умолчанию 20 """ session = create_session() query = session.query(Color).order_by(Color.count.desc()) print(*[x.ljust(width, ' ') for x in Color.__table__.columns.keys()]) for i in query: print(*[str(x).ljust(width, ' ') for x in (i.color, i.count)])
def update_statistics(column_name, value): session = create_session() first_line = session.query(Statistics).first() new_data = Statistics() setattr(new_data, column_name, value) if first_line is None: session.add(new_data) else: session.query(Statistics).update({column_name: value}) session.commit()
def add_cat(name, color, tail_length, whiskers_length): """ Добавляет кота в таблицу cats """ session = create_session() session.add( Cat(name=name, color=color, tail_length=tail_length, whiskers_length=whiskers_length)) session.commit()
def get_stat(width=22): """ Выводит на экран содержимое таблицы cats_stat :param width: ширина колонки в символах, по умолчанию 22 """ session = create_session() query = session.query(Statistics) print(*[x.ljust(width, ' ') for x in Statistics.__table__.columns.keys()]) for i in query: print(*[ str(x).ljust(width, ' ') for x in (i.tail_length_mean, i.tail_length_median, i.tail_length_mode, i.whiskers_length_mean, i.whiskers_length_median, i.whiskers_length_mode) ])
def compute_colors(color_list): """ Подсчитывает количество котов каждого цвета Создает строку с цветом или обновляет значение, если оно было :param color_list: список цветов """ session = create_session() for color in color_list: count = session.query(Cat.color).filter(Cat.color == color).count() color_query = session.query(Color).filter( Color.color == color).scalar() if color_query is None: session.add(Color(color=color, count=count)) else: session.query(Color).filter(Color.color == color).update( {Color.count: count}) session.commit()
def get_cats(number_of_lines=None, width=20): """ Выводит на экран содержимое таблыцы cats :param number_of_lines: количество строк, выводимых на экран если не указано, выводятся все строки :param width: ширина колонки в символах, по умолчанию 20 """ session = create_session() print(*[x.ljust(width, ' ') for x in Cat.__table__.columns.keys()]) if number_of_lines is None: query = session.query(Cat) for i in query: print(*[ str(x).ljust(width, ' ') for x in (i.name, i.color, i.tail_length, i.whiskers_length) ]) else: query = session.query(Cat).limit(number_of_lines) for i in query: print(*[ str(x).ljust(width, ' ') for x in (i.name, i.color, i.tail_length, i.whiskers_length) ])
def get_number_of_lines(): """ Возвращает количество строк в таблице cats """ session = create_session() return session.query(Cat).count()