Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在SQLAlchemy中对M2M执行简单的next()方法?_Python_Sqlalchemy_Cycle_Itertools - Fatal编程技术网

Python 如何在SQLAlchemy中对M2M执行简单的next()方法?

Python 如何在SQLAlchemy中对M2M执行简单的next()方法?,python,sqlalchemy,cycle,itertools,Python,Sqlalchemy,Cycle,Itertools,我有两个模型,多对多,小组和个人 我可以访问group.personals并获得相关个人的列表。我在组模型上有一个“last_individual_id”列,用于跟踪上次使用的个人。有了这些信息,我想知道如何为一个团队找到下一个人 我曾想过为个人获取id并使用itertools.cycle,但我无法指定起点。另外,如果我能在SQLAlchemy中正确地做到这一点,那么这可能是一种缓慢的方法 你有没有想过如何做到这一点?我觉得我会为答案如此简单而感到尴尬。。。但是我今天没有喝咖啡因 谢谢一种可能是

我有两个模型,多对多,小组和个人

我可以访问group.personals并获得相关个人的列表。我在组模型上有一个“last_individual_id”列,用于跟踪上次使用的个人。有了这些信息,我想知道如何为一个团队找到下一个人

我曾想过为个人获取id并使用itertools.cycle,但我无法指定起点。另外,如果我能在SQLAlchemy中正确地做到这一点,那么这可能是一种缓慢的方法

你有没有想过如何做到这一点?我觉得我会为答案如此简单而感到尴尬。。。但是我今天没有喝咖啡因


谢谢

一种可能是使用itertools.dropwhile,但这可能会受到所需解决方案范围的限制,因为它不清楚,而且itertools.dropwhile也不像itertools.cycle那样无限循环浏览您的列表

您没有提供数据模型的很多细节。我假设group.individuals返回一个个体对象列表,'.id'属性表示每个个体的id号。例如,假设您在group.Persons列表中查找个人id 7:

from itertools import dropwhile
for item in dropwhile(lambda x: x.id != 7, group.individuals):
    print item
这将遍历列表,直到它准确地找到id=7或更高,直到x.id!=7,因为itertools.dropwhile在第一次错误测试之前不会返回任何内容,所以它将开始从列表中返回单个对象。因此,如果该列表中的id为:[1,19,5,6,7,2,4,5],则返回值为:72445

出于您的目的,听起来您会忽略第一个返回的响应,然后使用后面的响应

另一种方法是迭代原始的group.individuals列表,以找到所需id的索引,然后只需增加索引-如果计算的索引超过列表,这还允许您在0处开始索引,例如:

def nextrecord(recordlist, value):    
    for i in range(len(recordlist)):        
        if recordlist[i].id == value:
            newindex = i + 1
            break
    if newindex >= len(recordlist):
        newindex = 0    
    return recordlist[newindex]

print nextrecord(group.individuals, 7)

但是,当然,这是更离散的,并且不可编辑。可能还有很多其他的方法来实现这一点,包括让我的功能变得更适合,但我还没有喝过咖啡因

你不是指迭代器意义上的下一步,是吗?你没有很清楚地说明这个问题。对应的sql是什么,类似于从individual.group\u id=group.id的个人加入组中选择individual.id,其中individual.id>groups.last\u individual\u id order by individual.id limit 1?Raceymans第二个解决方案提供了我的答案。我已清除浏览器cookies,因此无法选择它作为答案。如果一些管理员可以选择他的回应,并删除此评论,我们可以清理这一个。比