如何解决与表之间的关系冲突
我一直在控制台上不断收到警告,我读了多少书都快疯了,但我一直没能解决这个问题:
SAWarning:关系 'Book.users' 会将列 user.uid 复制到列 user_book.uid,这与关系:'User.books'(将 user.uid 复制到 user_book.uid)冲突。如果这不是故意的,请考虑这些关系是否应该与 back_populates 链接,或者如果 viewonly=True 应该应用于一个或多个,如果它们是只读的。对于外键约束部分重叠的不太常见的情况,orm.foreign() 注释可用于隔离应写入的列。 'overlaps' 参数可用于删除此警告。
控制台在本通知中引用的表格如下:
user_book = db.Table('user_book',db.Column('uid',db.Integer,db.ForeignKey('user.uid'),primary_key=True),db.Column('bid',db.Text,db.ForeignKey('book.bid'),db.Column('date_added',db.DateTime(timezone=True),server_default=db.func.Now())
)
class User(db.Model):
__tablename__ = 'user'
uid = db.Column(db.Integer,primary_key=True)
email = db.Column(db.String(25),nullable=False)
hash = db.Column(db.String(),nullable=False)
first_name = db.Column(db.String(30),nullable=True)
last_name = db.Column(db.String(80),nullable=True)
books = db.relationship('Book',secondary=user_book)
class Book(db.Model):
__tablename__ = 'book'
bid = db.Column(db.Text,primary_key=True)
title = db.Column(db.Text,nullable=False)
authors = db.Column(db.Text,nullable=False)
thumbnail = db.Column(db.Text,nullable=True)
users = db.relationship('User',secondary=user_book)
我使用 user_book table
向用户展示他添加的书籍。
我错过了什么?借此机会问一下,表和外键的关系在语义上做对了吗?
解决方法
正如警告消息所暗示的那样,您的关系中缺少 back_populates=
属性:
class User(db.Model):
# …
books = db.relationship('Book',secondary=user_book,back_populates="users")
# …
class Book(db.Model):
# …
users = db.relationship('User',back_populates="books")
# …
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。