使用SQLAlchemy核心从where子句中排除某些内容



我有以下模型:


class Vote(BaseModel):
__tablename__ 'vote'
id = sa.Column(sa.Integer, autoincrement=True, index=True, primary_key=True)
value = sa.Column(sa.Integer, nullable=False)
rated_user_id = sa.Column(
sa.Integer, sa.ForeignKey('user.id', ondelete='cascade'))
rating_user_id = sa.Column(
sa.Integer, sa.ForeignKey('user.id', ondelete='cascade'))

我只想用进行查询。给我联接的数据。,尽管如此,我不知道如何进行这个查询。这是我的方法:

query = sa.select(
[votes, users.alias('u1'), users.alias('u2')],
use_labels=True
).select_from(votes.join(users.alias('u1'),votes.c.rated_user_id == users.alias('u1').c.id).join(users.alias('u2'), votes.c.rating_user_id == users.alias('u2').c.id))

Buy-it不起作用,因为它在FROM子句中包含"user"作为"u1"。谢谢

alias()的每次调用都会生成一个唯一的别名对象,即使您给它们相同的标签也是如此。相反,给别名一个名称,并在查询的每个部分使用相同的对象:

u1 = users.alias('u1')
u2 = users.alias('u2')
query = sa.select([votes, u1, u2], use_labels=True).
select_from(votes.
join(u1, votes.c.rated_user_id == u1.c.id).
join(u2, votes.c.rating_user_id == u2.c.id))

最新更新