Python SQLAlchemy多对多外接带过滤器
我正在使用PrettyPrinted的Flask SQLAlchemy教程,试图找出在查询多对多表环境时如何获得特定行为 我将在下面介绍我一直在尝试的查询和SQLAlchemy ORM设置的代码。根据教程(不涉及连接或外部连接),有两个主表,一个通道表和一个用户表,以及一个名为“subs”的关系表。因此,每个用户都可以“订阅”一个频道,或者多个频道,或者没有频道 我想弄清楚的是如何查询,这样我就可以得到通道中所有行的列表,但要过滤,或者有一个计算列或额外列,只指示特定用户id“订阅”的行。因此,将返回所有内容,对于所选用户订阅的内容,只返回一个额外的列(或列中的非空数据) 以下是我一直在尝试的问题(尝试了一些其他问题,但运气更差): 问题在于,这不仅返回通道中的所有行(我确实希望它这样做),而且当我深入到每一行时,而不是只有一个null和NOTNULL,或者任何只指示所选用户id被订阅的内容,它会列出订阅每个通道的所有用户。我能够模仿我正在尝试做的事情的唯一方法是使用两个查询-一个用于所有频道,一个用于用户订阅的所有频道,然后使用理解来构建我希望通过单个查询得到的内容。在数据管理方面不是很好的做法 有人能告诉我我做错了什么,以及如何去改正它吗?非常感谢你 下面是正在使用的ORM表的代码:Python SQLAlchemy多对多外接带过滤器,python,mysql,sqlalchemy,flask-sqlalchemy,Python,Mysql,Sqlalchemy,Flask Sqlalchemy,我正在使用PrettyPrinted的Flask SQLAlchemy教程,试图找出在查询多对多表环境时如何获得特定行为 我将在下面介绍我一直在尝试的查询和SQLAlchemy ORM设置的代码。根据教程(不涉及连接或外部连接),有两个主表,一个通道表和一个用户表,以及一个名为“subs”的关系表。因此,每个用户都可以“订阅”一个频道,或者多个频道,或者没有频道 我想弄清楚的是如何查询,这样我就可以得到通道中所有行的列表,但要过滤,或者有一个计算列或额外列,只指示特定用户id“订阅”的行。因此,
subs = db.Table('subs',
db.Column('user_id', db.Integer, db.ForeignKey('user.user_id')),
db.Column('channel_id', db.Integer, db.ForeignKey('channel.channel_id'))
)
class User(db.Model):
user_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20))
subscriptions = db.relationship('Channel', secondary=subs, backref=db.backref('subscribers', lazy='dynamic'))
class Channel(db.Model):
channel_id = db.Column(db.Integer, primary_key=True)
channel_name = db.Column(db.String(20))
你能提供一个你希望得到什么,或者你目前正在做什么来获得它的例子吗?可能有些相关:
subs = db.Table('subs',
db.Column('user_id', db.Integer, db.ForeignKey('user.user_id')),
db.Column('channel_id', db.Integer, db.ForeignKey('channel.channel_id'))
)
class User(db.Model):
user_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20))
subscriptions = db.relationship('Channel', secondary=subs, backref=db.backref('subscribers', lazy='dynamic'))
class Channel(db.Model):
channel_id = db.Column(db.Integer, primary_key=True)
channel_name = db.Column(db.String(20))