python - 一个或多个映射器未能初始化:relationship 'post' 需要一个类或一个映射器参数
问题描述
'''sqlalchemy.exc.InvalidRequestError:一个或多个映射器无法初始化 - 无法继续初始化其他映射器。触发映射器:'映射类评论->评论'。最初的例外是:关系'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 文档页面上阅读更多内容。
推荐阅读
- javascript - 找不到模块 'mongoose-unique-validator'
- c# - 从 Windows 服务调用 .bat
- postgresql - 非易失性函数中不允许 CREATE TABLE
- javascript - 基于使用javascript的下拉选择填充表中的多个字段,数据应在数组中
- angular - 设置 NGRX8 商店
- c# - DeploymentItem(Path,outputDirectory)在新的单元测试项目中不起作用
- excel - Excel VBA 编辑 - 识别要合并的列
- php - 为什么结果是链接而不是数组?(谷歌搜索使用 PHP 抓取)
- node.js - 如何使用打字稿和猫鼬?
- azure-devops - 如何根据构建管道的路径过滤器触发 DevOps 发布管道