Задать вопрос
@89109983838

Как выбрать поля из базы для создания меню сайта без ненужных столбцов в Flask-SQLAlchemy?

Есть у меня такая функция для выборки всех постов для генерирования меню

@app.context_processor
def menu():
    articles = Article.query.filter_by(onoff=1).all()
    return dict(articles=articles)

Учитывая что меню на всех страницах сайта то "завернута" в контекст-процессор запускающийся при каждом обращении к сайту, и предающем все посты шаблонизатору.
Так то работает - но проблема в том что помимо нужной информации (название поста, ЧПУ ссылка, порядковый номер) выгружается куча ненужной информации для выше указанной цели (к примеру сами статьи на страницах......:) - что думаю "не есть Гуд"!

Как сформировать запрос так чтобы отсеять ненужные столбцы и оставить только строки: название поста, ЧПУ ссылка, порядковый номер.

filter_by(onoff=1) = это фильтр, выгружать только отмеченные к показу посты.
(7 раз пытаюсь разобраться по манам к SQLAlchemy - чтот то с переводом у меня плохо выходит).

Заранее Вам благодарен!
  • Вопрос задан
  • 3233 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@denself
Не уверен, будет ли работать этот код в обертке с Flask, но в SQLAlchemy это делается как-то так:
db.session.query(Article.name, Article.url, Article.num).filter_by(onoff=1).all()

Такая инструкция вернет список кортежей вида:
[("name1", "url1", "num1"), ("name2", "url2", "num2"), ... ]
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Tark
@Tark
Pyramid'альный мир
Комментировать
@89109983838 Автор вопроса
from sqlalchemy.orm import load_only

@app.context_processor
def menu():
    articles = Article.query.filter_by(onoff=1).options(load_only("name", "url", "num"))
    return dict(articles=articles)


Попробовал так... сайт вроде как работает! :) - времени нет посмотреть из интерактивного режима что там конкретно выгружается... потом вернуть к этому вопросу, проверю, отпишусь...

################ добавлено спустя долгое время... #####################
и так если в шаблоне выставить где нето {{ articles }} то в html на этом месте такая строка:
SELECT article.url AS article_url, article.name AS article_name FROM article, article.num AS article_num WHERE article.onoff = :onoff_1

если же в генерацию меню вместо текста ссылок выставить названия поля где хранится код статей
{% for article in articles %}
        <li><a href="/{{ article.url }}/">{{ article.article }}</a></li>
{% endfor %}

то вместо названий громадный набор текстов (ну самих статей.....)

а если еще так поступить то вообще АТАС! ;)
{% for article in articles %}
        <li><a href="/{{ article.url }}/">{{ article.article|safe }}</a></li>
{% endfor %}


Так что вопрос остается открытым .......
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы