一个或多个映射器无法初始化 :关系'post'需要一个类或映射器参数



'''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

尝试:

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文档页面上阅读更多信息。

最新更新