与表之间的关系冲突

4dbbbstv  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(310)

此问题已从数据库管理员堆栈交换迁移,因为它可以在堆栈溢出时得到回答。昨天迁移了。
我一直在控制台上收到警告,读了这么多书,我都快发疯了,但我没能解决这个问题:
警告:关系“book.users”将把user.uid列复制到user\u book.uid列,这与关系“user.books”(将user.uid复制到user\u book.uid)冲突。如果这不是意图,那么考虑这些关系是否应该与Buffy填充关联,或者如果VIEWION=真应该应用于一个或多个,如果它们是只读的。对于外键约束部分重叠的不太常见的情况,可以使用orm.foreign()注解来隔离应该写入的列。“重叠”参数可用于删除此警告。
控制台在本通知中引用的表格如下:

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'), primary_key=True),
                     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 向用户显示他添加的书籍。
我错过了什么?我借此机会问,从语义上讲,表和外键之间的关系是否正确?

deyfvvtc

deyfvvtc1#

正如警告信息所示,您错过了 back_populates= 关系中的属性:

class User(db.Model):

# …

    books = db.relationship('Book', secondary=user_book, back_populates="users")

# …

class Book(db.Model):

# …

    users = db.relationship('User', secondary=user_book, back_populates="books")

# …

相关问题