【问题标题】:Python/SQLALCHEMY: Unsure on how to user 'filter_by'Python/SQLALCHEMY:不确定如何使用“filter_by”
【发布时间】:2021-02-24 19:45:54
【问题描述】:

我试图仅显示当前登录用户在网站上发布的帖子。我相信我需要 filter_by 关键字。我查看了 SQlalchemy 的文档,但仍然在语法上遇到困难并使其工作:

进口:

from project.models import User, Post

from flask_login import login_user, current_user, logout_user, login_required

路线:

@app.route("/history")

def history():

page = request.args.get('page', 1, type=int)
posts = Post.query.order_by(Post.end_date.desc()).filter_by(User.id==current_user)
return render_template('history.html', posts=posts, title='About')`

用户/帖子页面:

class User(db.Model, UserMixin):

id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(60), nullable=False)
posts = db.relationship('Post', backref='author', lazy=True)`

class Post(db.Model):

id = db.Column(db.Integer, primary_key=True)
identification = db.Column(db.String(10), nullable=False)
date_posted = db.Column(db.Date, nullable=False, default=datetime.utcnow)
notes = db.Column(db.Text)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)`

错误: 当我输入 filter_by(User.id==current_user):

TypeError: filter_by() takes 1 positional argument but 2 were given

当我输入 filter_by(user.id==current_user) 时不确定用户是否应该大写:

NameError: name 'user' is not defined

当我输入 filter_by(user_id=current_user)

sqlalchemy.exc.ArgumentError: Object User('test', 'test@yahoo.com'), '1' is not legal as a SQL literal value

感谢您的帮助

【问题讨论】:

  • 我试过:filter(Post.user_id==current_user.id),但我的页面根本没有显示任何帖子,这让我相信我在那里搞砸了一些东西。如果我执行 'current_user' 而不是 'current_user.id' 我会返回原始问题中的最后一个错误代码。任何更多的帮助将不胜感激!

标签: python html sqlalchemy


【解决方案1】:

如果您复制错误可能会对我们有所帮助。

我认为您以错误的方式使用 filter_by。您需要使用列名作为参数:

.filter_by(user_id=current_user.id)

【讨论】:

  • 刚刚添加了错误代码,希望对您有所帮助。感谢您的浏览,我尝试了您的建议,返回 NameError: name 'user_id' is not defined
  • 如果使用 .filter_by(user_id==current_user.id) 您没有返回任何结果,请检查您的帖子表。可能是您在插入数据时遇到问题。
  • 当我这样做时:filter(Post.user_id==current_user.id),我没有得到任何结果。查看我的表,我看到 post 表下有 user_id:ibb.co/Fn4bL8d 所以我怀疑错误是 current_user 部分?
  • 您只需要使用一个= 符号,而不是两个。 filter_by 使用关键字参数
  • filter(Post.user_id=current_user.id) SyntaxError: expression cannot contain assignment,也许你的意思是“==”?是我使用一个时得到的错误吗=
猜你喜欢
  • 1970-01-01
  • 2018-11-05
  • 2015-07-05
  • 2017-04-02
  • 2013-06-08
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多