代码之家  ›  专栏  ›  技术社区  ›  DarkMath

SAWarning:对于延迟加载的属性的相似性,多行返回uselist=False。tag1'

  •  0
  • DarkMath  · 技术社区  · 5 年前

    我从SQLAlchemy得到以下警告,我想知道问题是什么:

    \venv\lib\site-packages\sqlalchemy\orm\strategies.py:911: SAWarning: Multiple rows returned with uselist=False for lazily-loaded attribute 'Similarity.tag1' 
      util.warn(
    \venv\lib\site-packages\sqlalchemy\orm\strategies.py:911: SAWarning: Multiple rows returned with uselist=False for lazily-loaded attribute 'Similarity.tag' 
      util.warn(
    

    我的ORM类如下所示:

    class Similarity(db.Model):
        __tablename__ = 'similarities'
    
        tag_id_1 = db.Column(db.ForeignKey('tags.id'), primary_key=True, nullable=False)
        tag_id_2 = db.Column(db.ForeignKey('tags.id'), primary_key=True, nullable=False, index=True)
        value = db.Column(DOUBLE, nullable=False)
    
        tag = db.relationship('Tag', primaryjoin='Similarity.tag_id_1 == Tag.id', backref='tag_similarities')
        tag1 = db.relationship('Tag', primaryjoin='Similarity.tag_id_2 == Tag.id', backref='tag_similarities_0')
    
    
    class Tag(db.Model):
        __tablename__ = 'tags'
    
        id = db.Column(db.Integer, primary_key=True, nullable=False, autoincrement=True)
        language_id = db.Column(db.ForeignKey('languages.id'), primary_key=True, nullable=False, index=True)
        name = db.Column(db.String(45), nullable=False, index=True)
    
        language = db.relationship('Language', primaryjoin='Tag.language_id == Language.id', backref='tags')
    

    我用 SQLAlchemy 1.3.22 以及Python 3.8。你能解释一下这条信息是关于什么的吗?我怎样才能解决这个问题?

    0 回复  |  直到 5 年前
        1
  •  0
  •   readyplayer77 Espoir Murhabazi    5 年前

    正如@zvone所说,这些关系 tag tag1 可以指向多个标记,因为 Tag 有两个主列。这就是警告信息的内容: 这种关系并不是独一无二的 .

    因此,解决方案要么是消除这些关系,要么是使它们独一无二。