Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy多对多外接带过滤器_Python_Mysql_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python SQLAlchemy多对多外接带过滤器

Python SQLAlchemy多对多外接带过滤器,python,mysql,sqlalchemy,flask-sqlalchemy,Python,Mysql,Sqlalchemy,Flask Sqlalchemy,我正在使用PrettyPrinted的Flask SQLAlchemy教程,试图找出在查询多对多表环境时如何获得特定行为 我将在下面介绍我一直在尝试的查询和SQLAlchemy ORM设置的代码。根据教程(不涉及连接或外部连接),有两个主表,一个通道表和一个用户表,以及一个名为“subs”的关系表。因此,每个用户都可以“订阅”一个频道,或者多个频道,或者没有频道 我想弄清楚的是如何查询,这样我就可以得到通道中所有行的列表,但要过滤,或者有一个计算列或额外列,只指示特定用户id“订阅”的行。因此,

我正在使用PrettyPrinted的Flask SQLAlchemy教程,试图找出在查询多对多表环境时如何获得特定行为

我将在下面介绍我一直在尝试的查询和SQLAlchemy ORM设置的代码。根据教程(不涉及连接或外部连接),有两个主表,一个通道表和一个用户表,以及一个名为“subs”的关系表。因此,每个用户都可以“订阅”一个频道,或者多个频道,或者没有频道

我想弄清楚的是如何查询,这样我就可以得到通道中所有行的列表,但要过滤,或者有一个计算列或额外列,只指示特定用户id“订阅”的行。因此,将返回所有内容,对于所选用户订阅的内容,只返回一个额外的列(或列中的非空数据)

以下是我一直在尝试的问题(尝试了一些其他问题,但运气更差):

问题在于,这不仅返回通道中的所有行(我确实希望它这样做),而且当我深入到每一行时,而不是只有一个null和NOTNULL,或者任何只指示所选用户id被订阅的内容,它会列出订阅每个通道的所有用户。我能够模仿我正在尝试做的事情的唯一方法是使用两个查询-一个用于所有频道,一个用于用户订阅的所有频道,然后使用理解来构建我希望通过单个查询得到的内容。在数据管理方面不是很好的做法

有人能告诉我我做错了什么,以及如何去改正它吗?非常感谢你

下面是正在使用的ORM表的代码:

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))