Flask,SQLAlchemy,无法将集合与对象或集合进行比较;使用 contains() 来测试成员资格

Flask, SQLAlchemy, Can't compare a collection to an object or collection; use contains() to test for membership

我正在尝试创建一个 Alert table,并向其添加一个 Command table。我希望警报的名称和与之关联的命令一起显示在索引页中。但我无法得到它。你能看看我的代码并告诉我我的错误吗?

jointable = db.Table('jointable',
    db.Column('command_id', db.Integer, db.ForeignKey('commands.id'), primary_key=True),
    db.Column('alert_id', db.Integer, db.ForeignKey('alerts.id'), primary_key=True))


class Command(db.Model):
    __tablename__='commands'
    id = db.Column(db.Integer, primary_key=True)
    cname = db.Column(db.Text)
    alertses = db.relationship('Alert', secondary=jointable, backref=db.backref('commands', lazy = 'select'))
    alert_id = db.Column(db.Integer)



class Alert(db.Model):
    __tablename__='alerts'
    id = db.Column(db.Integer, primary_key=True)
    aname = db.Column(db.Text)

如果我的请求是这样的:**Command = Command.query.join(Alert.commands).filter(Alert.commands == Command.id).all() ,我收到错误:无法将集合与对象或集合进行比较;使用 contains() 测试成员资格

如果我的请求是这样的:Command = Command.query.join(Alert.commands).filter(Alert.id == Command.alertses).all( )) 我得到:enter image description here

你没有说清楚,但我假设这种关系是一对多的。

如果不是这种情况,请查看 - sql-alchemy relationships doc

希望你会发现这个片段有用,注意我改变了一些命名约定并使用了 sqlalchemy

的基础 class
from sqlalchemy import Table, Column, Integer, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Command(Base): #child
    __tablename__='command'
    id = db.Column(Integer, primary_key=True, index=True)
    name = db.Column(Text)
    alert_id = db.Column(Integer, ForeignKey('alert.id'))


class Alert(Base): #parent
    __tablename__='alert'
    id = db.Column(Integer, primary_key=True, index=True)
    name = db.Column(Text)
    command = relationship("Command")

为了查询特定警报和相关命令试试这个 -

alert = Alert.query.get(id)

所有-

alerts - Alert.query.all()

命令集合将在 alert.command

编辑: 如果一切都与渲染部分有关,请在您想要的路线下尝试 -

alerts = Alert.query.all() 
return render_template('index.html', alerts=alerts)

在index.html-

{% for alert in alerts %}
    <div>{{ alert.name }}</div>
    {% for command in alert.command &}
        <p>{{command.name}}</p>
    {% endfor %}
{% endfor %}