Я работаю над приложением для блога в Flask и изо всех сил пытаюсь найти способ обернуть некоторый код, который будет фильтровать сообщения блога по категориальным атрибутам (или тегам), которые пользователи будут добавлять в свои сообщения. Например, приведенный ниже код предназначен для возврата всех сообщений, отмеченных как «анонимные».
@app.route('/search', methods=['GET', 'POST'])
def search():
form = SearchForm()
if form.validate_on_submit():
anonymous = form.anonymous.data
flash('Here are your search results!')
return redirect(url_for('search_results', anonymous=anonymous))
return render_template('search.html', title='Search', form=form)
@app.route('/search_results/', methods=['GET', 'POST'])
def search_results():
page = request.args.get('page', 1, type=int)
anonymous = request.args.get('anonymous')
posts = Post.query.filter_by(anonymous=anonymous).paginate(page, app.config['POSTS_PER_PAGE'], False).items
return render_template('search_results.html', title='Search Results', posts=posts)
Как видно из приведенного выше кода, я хотел бы иметь возможность использовать request.args.get('anonymous')
, чтобы узнать, ищет ли пользователь анонимные сообщения, а затем использовать Post.query.filter_by(anonymous=anonymous)
, чтобы найти все сообщения, соответствующие этому описанию. . Это работает без проблем, когда я использую Post.query.filter_by(anonymous=True)
, как вы можете видеть ниже.
print(Post.query.filter_by(anonymous=True))
posts = Post.query.filter_by(anonymous=True).paginate(page, app.config['POSTS_PER_PAGE'], False).items
print(posts)
SELECT post.id AS post_id, post.body AS post_body, post.image_name AS post_image_name, post.image AS post_image, post.anonymous AS post_anonymous, post.timestamp AS post_timestamp, post.user_id AS post_user_id
FROM post
WHERE post.anonymous = 1
[<Post my first post!>, <Post new post!>]
Однако, когда я передаю переменную в query.filter_by, похоже, что она не вставляет значение в параметр. Результатом запроса является пустой набор, даже если значение «анонимный» определенно установлено на True.
anonymous = request.args.get('anonymous')
print(anonymous)
print(Post.query.filter_by(anonymous=anonymous))
posts = Post.query.filter_by(anonymous=anonymous).paginate(page, app.config['POSTS_PER_PAGE'], False).items
print(posts)
True
SELECT post.id AS post_id, post.body AS post_body, post.image_name AS post_image_name, post.image AS post_image, post.anonymous AS post_anonymous, post.timestamp AS post_timestamp, post.user_id AS post_user_id
FROM post
WHERE post.anonymous = ?
[]
В запросе я получаю условие WHERE post.anonymous = ?
вместо WHERE post.anonymous = 1 (or 0)
, которое я надеялся увидеть. Ниже приведен код, который я пробовал:
Я предполагаю, что SQL -Alchemy просто не поддерживает использование переменной в качестве заполнителя для значения, которое я хочу запросить. В противном случае может быть какой-то синтаксис, о котором я не знаю, который мне нужно использовать для выполнения этой работы, что я и изучаю в данный момент. Любое руководство будет очень признательно.