'''sqlalchemy.exc.InvalidRequestError:一个或多个映射器初始化失败-无法继续进行其他映射器的初始化。触发映射器:“映射的类Comment-> comment”。最初的例外是:关系“ post”需要一个类或一个映射器参数(收到:)
我想建立它们之间的关系,但它向我显示了这个错误,我是sqlalchemy的初学者,请解决此问题。 '''
class Posts(db.Model):
Sno = db.Column(db.Integer,primary_key=True)
title = db.Column(db.String(80),unique=False,nullable=False)
slug = db.Column(db.String(21),nullable=False)
content= db.Column(db.String(120),nullable=False)
date = db.Column(db.String(12), unique=True)
img_file = db.Column(db.String(12), unique=False, nullable=True)
class Comment(db.Model):
__tablename__ = 'comment'
Sno = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(50),unique=False,nullable=False)
Email = db.Column(db.String(120),nullable=False)
Message = db.Column(db.String(120), nullable=False)
post_sno = db.Column(db.Integer, db.ForeignKey('post.Sno'), unique=False, nullable=False)
post = db.relationship('posts', backref=db.backref('posts', lazy=True))
date = db.Column(db.String(12), unique=True,default=datetime.utcnow)
status = db.Column(db.Boolean,default=False)
def __repr__(self):
return '<Comment %r>' %self.Name
答案 0 :(得分:0)
尝试:
class Posts(db.Model):
columns = your_columns(xyz, abc)
comment_id = db.Column(
db.Integer,
db.ForeignKey('comment.id'),
nullable=False
)
class Comment(db.Model):
columns = your_columns(xyz, abc)
posts = db.relationship('Posts', backref='comment', lazy=True)
relationship
应该指向orm试图从中创建列表的类。因此,orm尝试为每个注释创建Posts
的列表。 backref允许您使用.object
表示法引用关系的另一端。因此,如果您构建一个Posts
,并且想要获得它的Comment
如下:
posts = Posts.get_or_404(1)
comment = posts.comment # this is what your "backref" refers to
顺便说一句,我认为您可能混淆了自己的关系。我认为评论与帖子之间是多对一的关系,而不是相反。
如果是这样,应该是这样的:
class Post(db.Model):
columns = your_columns(xyz, abc)
comments = db.relationship('Comment', backref='post', lazy=True)
class Comment(db.Model):
columns = your_columns(xyz, abc)
post_id = db.Column(
db.Integer,
db.ForeignKey('post.id'),
nullable=False
)
然后,您可以获得有关此类帖子的所有评论:
post = Post.get_or_404(1)
comments = post.comments
您可以像这样获得每个评论的帖子:
comment = Comment.get_or_404(1)
post = comment.post
您可以在Flask SQLAlchemy doc page上阅读更多内容。