python - SQLAlchemy 查询,其中比较多列的元组
问题描述
我有一个查询需要在我的应用程序中支持分页。
def get_paginated_items(
self,
limit: int,
last_shipment_time: int = MAX_INT,
last_item_id: int = MAX_INT,
s = (
select([self.items])
.where((
self.items.c.shipment_time,
self.items.c.item_id,
) < (
last_shipment_time,
last_item_id,
))
.order_by(
self.items.c.shipment_time.desc(),
self.items.c.item_id.desc(),
)
.limit(limit)
)
with self.get_connection() as connection:
result = connection.execute(s)
return result.fetchall()
如果两个项目具有相同shipment_time
的 ,item_id
则应使用 来打破比较中的平局。
显然 SQL 对此有支持(https://stackoverflow.com/a/52376813/1639564)。但是,当我使用此查询时,它似乎忽略了元组的第二个元素。
我正在为数据库使用 SQLite。
解决方案
您需要在 where 条件中指定您正在使用元组:
from sqlalchemy import tuple_
def get_paginated_items(
self,
limit: int,
last_shipment_time: int = MAX_INT,
last_item_id: int = MAX_INT,
s = (
select([self.items])
.where(tuple_(
self.items.c.shipment_time,
self.items.c.item_id,
) < tuple_(
last_shipment_time,
last_item_id,
))
.order_by(
self.items.c.shipment_time.desc(),
self.items.c.item_id.desc(),
)
.limit(limit)
)
with self.get_connection() as connection:
result = connection.execute(s)
return result.fetchall()
推荐阅读
- ospf - 我应该在核心交换机还是边缘交换机上启用 OSPF?
- asp.net - 在 HTML 表格标签中使用 AngularJS ng-repeat-start 和 ng-repeat-end 的同一实体的嵌套循环
- asp.net - Akka.net 异步方法处理
- mysql - MySQL 语句在更新中使用 group_concat
- python - 我在 Django 应用程序中同一类的两个对象之间存在 OneToOne 关系。是否可以强制执行这种关系的唯一性?
- c# - 如何将默认参数添加到asp.net mvc中的属性路由
- embed - 如何在不使用小部件的情况下将公共 instagram 提要嵌入网站?
- angular - 在添加另一个数字之前,角度反应形式不会返回小数
- javascript - 当我从中获取值时,我的自定义类代理返回未定义
- java - 达到速率限制时会抛出什么异常