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