对于循环遍历sql查询中的两个列表,其中一个列表由较小的列表组成

2024-10-01 04:44:28 发布

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

我有一个大型数据库,我使用python中的sql查询将数据写入csv文件。在sql数据库中,每一行都是一个手指ID的一系列空间信息。我可以对查询进行参数化,以获取信息并编写每个手指所需的文件。但是,问题出现在创建一个函数for循环时,该循环对列表中所有索引的每个ID进行迭代。你知道吗

INDEX = ([44,48,50,55,56,57], [49,54,57,61,62,64])


FINGER = ('rt100', 'rt101')

d = {}
newdf = {}

for Y in FINGER:
    for X in INDEX:
        for x in X:
            d[x] = pd.read_sql ("SELECT x,y, CAST( (direction*180/3.142)as INT),CAST(quality*100 as INT) from UTS_7_fingerprints where finger like ? and ind = ?", conn, params=(Y,x))
            newdf[Y] = pd.concat(d)

上面的脚本运行sql查询并成功地创建了连接数据帧的字典。但是,对于每个FINGER值,它都会遍历整个索引列表。你知道吗

像这样:

{'rt100':      finger ind  ... CAST( (direction*180/3.142)as INT) CAST(quality*100 as INT)
44 0  rt100  44  ...                                281                       93
48 0  rt100  48  ...                                303                       32
49 0  rt100  49  ...                                281                       13
50 0  rt100  50  ...                                123                       82
54 0  rt100  54  ...                                281                       14
55 0  rt100  55  ...                                314                       67
56 0  rt100  56  ...                                123                       88
57 0  rt100  57  ...                                314                       71
61 0  rt100  61  ...                                326                       11

这是一个手指值的示例。我需要它对'rt100'只迭代[44,48,50,55,56,57],对'rt101'只迭代[49,54,57,61,62,64]。目前它正在迭代索引中的所有值。 实际上,我有更多类似的通信,因此需要一个接受这些参数的查询。你知道吗

更具体地说,我正在寻找一种方法来限制此循环的运行方式,以便为每个手指和索引编写每个查询,以分离如下所示的.csv文件:

372,402,281,83
394,303,303,97
415,422,123,86
458,328,292,95
464,487,112,96
483,389,303,95

每行都是信息:

'x,y, CAST( (direction*180/3.142)as INT),CAST(quality*100 as INT' 

每个手指内的每个食指。你知道吗


Tags: 文件csv数据in数据库forsqlas
1条回答
网友
1楼 · 发布于 2024-10-01 04:44:28

问题在于:

However for each FINGER value it is iterating over the entire INDEX list

它是由这个循环引起的:

for Y in FINGER:
    for X in INDEX:
        # whatever

在这种情况下,将对来自FINGERINDEX的值的所有组合执行whatever。如果每个都有N值,则whatever行执行N*N次。你知道吗

但是您希望它只对其中一些执行,即给定FINGER = [f1, f2, ..., fN]INDEX = [i1, i2, ..., iN]N(f1, i1)(f2, i2)、^{。。。,(fN, iN)。你知道吗

为此,请更改循环:

for Y, X in zip(FINGER, INDEX):
    # whatever

相关问题 更多 >