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 %}
我正在尝试创建一个 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
的基础 classfrom 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 %}