微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与表之间的关系冲突

如何解决与表之间的关系冲突

我一直在控制台上不断收到警告,我读了多少书都快疯了,但我一直没能解决这个问题:

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?