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

2024-03-28 22:10:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个模型,多对多,小组和个人。你知道吗

我可以访问组.个人得到相关人员的名单。我在组模型上有一个“last\ individual\ id”列来跟踪最后使用的个人。有了这些信息,我就想知道如何在一个群体中找到下一个人。你知道吗

我想给每个人弄个身份证然后用itertools.循环但我不能指定起点。加上这可能是一个缓慢的方式来做它,如果我能在SQLAlchemy正确地做它。你知道吗

你对如何做到这一点有什么想法吗?我觉得我会为答案如此简单而感到尴尬。。。但我今天没喝咖啡因!你知道吗

谢谢


Tags: 模型信息id人员sqlalchemy方式小组individual
1条回答
网友
1楼 · 发布于 2024-03-28 22:10:49

一种可能是使用itertools.dropwhile文件(但这可能会被限制为您想要的解决方案的范围,因为它也不清楚。)itertools.dropwhile文件不会像这样无限循环地浏览你的列表itertools.循环是的)。你知道吗

你没有提供你的数据模型的很多细节。我想是吧组.个人返回个体对象的列表,“.id”属性表示每个个体的id号。例如,假设您正在查找组.个人地址:

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],则返回:7 2 4 5。你知道吗

出于您的目的,听起来您应该忽略第一个返回的响应,然后使用后面的响应。你知道吗

另一种选择是遍历原始的组.个人若要查找所需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)

但是,当然,这是更离散的,是不可迭代的。可能有很多其他的方法来解决这个问题(包括让我的功能变得更容易),但我也还没有喝过我的咖啡因!你知道吗

相关问题 更多 >