Python SQLAlchemy 获取匹配行和列相同的下一行

标签 python postgresql sqlalchemy

我有一个看起来像这样的表:

+----------+----------+-------------+
| id       | name     | date        |   
+----------+----------+-------------+
| 1        | John     | 2018-08-21  |
+----------+----------+-------------+
| 2        | James    | 2018-08-22  |
+----------+----------+-------------+
| 3        | John     | 2018-08-22  |
+----------+----------+-------------+
| 4        | Paul     | 2018-08-23  |
+----------+----------+-------------+

我正在寻找一个查询,当您选择 id = 1 时,它将返回:

+----------+----------+-------------+
| id       | name     | date        |   
+----------+----------+-------------+
| 1        | John     | 2018-08-21  |
+----------+----------+-------------+
| 3        | John     | 2018-08-22  |
+----------+----------+-------------+

但是当您选择 id = 2 时,您会得到:

+----------+----------+-------------+
| id       | name     | date        |   
+----------+----------+-------------+
| 2        | James    | 2018-08-22  |
+----------+----------+-------------+

所以换句话说,查询应该通过 id 返回匹配的行和名称相同的下一行。

我会在 sqlalchemy 中完成此操作。感谢所有帮助。

最佳答案

使用关系数据库就是理解没有下一行,没有预设顺序。您需要通过排序请求特定顺序,然后根据需要按该顺序获取尽可能多的记录。

在这种情况下,您使用例如.filter(the_table.c.name == "John"),然后是 .order_by("id", "name"),然后是 .limit(2 )。如果您获取了两行,则有两条记录符合您的约束条件。可以没有记录,也可以只有一条记录。

如果您有 John 的多个记录集,并且想要一个特定的子序列,事情就会变得更加棘手。为此,您可以为日期添加一个条件,例如 the_table.c.id >= certain_id,或类似的条件。

一般来说,您的数据模型缺少一种将多个记录链接成一个序列的明确方法。您没有“序列 ID”或“以前的记录 ID”或类似的东西可以帮助查看多个记录的相关性。也许您可以为此使用时间戳列,如果它适合您的问题;很可能不会。

关于Python SQLAlchemy 获取匹配行和列相同的下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52263573/

相关文章:

python - 无法定义主键

python - 在 Python 中实现 "from . import *"的最佳方法是什么?

Python延长with关键字范围内变量的生命周期

sql - 如何在postgresql中按周分组

postgresql - 从 psql : Peer authentication failed 创建数据库

python - 在 Flask-SQLAlchemy 中选择计数

python - python 中的 xml(和 html)解析

python - scipy.optimize.curve_fit 用于对变量参数具有复杂依赖性的函数

postgresql - 从 PostgreSQL 导出所有内容

python - 如何使用SQLAlchemy在SQLite上创建全文检索索引并进行查询?