如何通过sqlalchemy为外键字段输入值
How to enter value for foriegn key field via sqlalchemy
我有模特:
class Post(db.Model):
id = db.Column(db.Integer, primary_key = True)
body = db.Column(db.String(2000))
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
comments = db.relationship('Comment', backref='parent_post', lazy='dynamic')
class Comment(db.Model):
id = db.Column(db.Integer, primary_key = True)
body = db.Column(db.String(140))
post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
当输入 post 到数据库时,我这样做:
if form.validate_on_submit():
post = Post(body=form.post.data, author=g.user)
db.session.add(post)
db.session.commit()
这是正确的。
但是如果我想直接传递 'post.id' 值,我该如何向数据库输入注释呢?
而不是对象 'post'。 (无法通过 html 中的表单 'pass' 反对)
if form.validate_on_submit():
comment = Comment(body=form.post.data, parent_post=form.p_id.data)
db.session.add(comment)
db.session.commit()
目前 p_id
持有价值 post.id
并且它给我错误:
AttributeError: 'int' object has no attribute '_sa_instance_state'
if form.validate_on_submit():
comment = Comment(body=form.post.data, parent_post=form.p_id.data)
### you need to add `comment` instead `post` in the line below
db.session.add(comment)
db.session.commit()
我强烈认为错误是由于 db.session.add(post)
。添加评论时请在 db.session.add(post)
和 db.session.add(comment)
行。
请确保通过表单传递的 POST-ID 存在于 post
table.
Comment.parent_post
是一种关系,由整数列 Comment.post_id
支持。目前,您正在尝试为关系分配一个 int(来自 form.p_id
)。为列分配一个 int 或为关系分配一个 Post
实例。
comment = Comment(post_id=form.p_id.data, body=form.post.data)
# or
post = Post.query.get_or_404(form.p_id.data)
comment = Comment(parent_post=post, body=form.post.data)
第二种方法更可取,因为在尝试使用该id之前,您验证了具有该id的post是否存在。
我有模特:
class Post(db.Model):
id = db.Column(db.Integer, primary_key = True)
body = db.Column(db.String(2000))
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
comments = db.relationship('Comment', backref='parent_post', lazy='dynamic')
class Comment(db.Model):
id = db.Column(db.Integer, primary_key = True)
body = db.Column(db.String(140))
post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
当输入 post 到数据库时,我这样做:
if form.validate_on_submit():
post = Post(body=form.post.data, author=g.user)
db.session.add(post)
db.session.commit()
这是正确的。
但是如果我想直接传递 'post.id' 值,我该如何向数据库输入注释呢? 而不是对象 'post'。 (无法通过 html 中的表单 'pass' 反对)
if form.validate_on_submit():
comment = Comment(body=form.post.data, parent_post=form.p_id.data)
db.session.add(comment)
db.session.commit()
目前 p_id
持有价值 post.id
并且它给我错误:
AttributeError: 'int' object has no attribute '_sa_instance_state'
if form.validate_on_submit():
comment = Comment(body=form.post.data, parent_post=form.p_id.data)
### you need to add `comment` instead `post` in the line below
db.session.add(comment)
db.session.commit()
我强烈认为错误是由于 db.session.add(post)
。添加评论时请在 db.session.add(post)
和 db.session.add(comment)
行。
请确保通过表单传递的 POST-ID 存在于 post
table.
Comment.parent_post
是一种关系,由整数列 Comment.post_id
支持。目前,您正在尝试为关系分配一个 int(来自 form.p_id
)。为列分配一个 int 或为关系分配一个 Post
实例。
comment = Comment(post_id=form.p_id.data, body=form.post.data)
# or
post = Post.query.get_or_404(form.p_id.data)
comment = Comment(parent_post=post, body=form.post.data)
第二种方法更可取,因为在尝试使用该id之前,您验证了具有该id的post是否存在。