带有条件的 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 选择中的唯一元素的主要内容,如果未能解决你的问题,请参考以下文章
使用blob在python中将pdf上传到sql-alchemy