带有条件的 sql-alchemy 选择中的唯一元素

Posted

技术标签:

【中文标题】带有条件的 sql-alchemy 选择中的唯一元素【英文标题】:unique elements in sql-alchemy selection with condition 【发布时间】:2015-08-03 23:29:08 【问题描述】:

我有一个名为 votes 的表,它存储用户的投票。该表存储 user_id、group_id、投票的时间戳和用户投票的 item_id:

votes
------------
user_id
group_id
item_id
vote_datetime

我设置表格的方式意味着用户可以多次为同一个项目投票,而这些投票之间的唯一区别就是日期时间。

我的问题是如何选择该表中具有相同 group_id 的所有元素,但条件是每个用户只为一个项目计算一票? 提前致谢 卡尔

编辑:这是一个开始。

选择 group_id 等于 1 的所有元素

allvotes = models.votes.query.filter_by(group_id=1).all()

那么我将如何修改它以确保用户不能为同一项目投票两次?

【问题讨论】:

你需要一个通用的 sql 解决方案吗? 没有一个 sql-alchemy 语句会很好......我会在一秒钟内在上面的编辑中给它一个开始 SQLAlchemy primary key assignement 的可能重复项 【参考方案1】:

您可以像这样为(用户、组、项目)的组合分配主键:

user_id = Column(Integer, primary_key = True)
group_id = Column(Integer, primary_key = True)
item_id = Column(Integer, primary_key = True)

如果您只想查询唯一投票,请使用 group 聚合函数:

query(user_id, group_id, item_id, func.min(vote_datetime)).
group_by(User_id, group_id, item_id)

上面应该接近你需要的语法。

【讨论】:

嗨 Bulat,我不太明白这如何解决我的问题? 不允许组内每个项目的用户投票重复,这意味着“用户不能投票两次”。或者这不是问题? 不,我希望用户多次投票,我只需要知道如何选择我只有唯一投票的样本。例如。只需选择具有相应 group_id 和 user_id 的第一票... 我想您需要重新表述您的问题以使其更清楚。 我已经更新了答案,基本上你需要按用户、组、项目按结果分组并获取日期时间的最小值。

以上是关于带有条件的 sql-alchemy 选择中的唯一元素的主要内容,如果未能解决你的问题,请参考以下文章

选择所有唯一元组的 SQL 查询

JavaEE开发之Spring中的条件注解组合注解与元注解

使用blob在python中将pdf上传到sql-alchemy

房间 - 选择带有 IN 条件的查询?

python 一些代码使用模式作为SQL-Alchemy的声明基础,以及对Celery分支的支持。

安装了sql-alchemy但导入sql_alchemy时失败