我有大型数据库,正在使用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值,它都会遍历整个INDEX列表。
看起来像这样:
{'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
这是FINGER值之一的示例。我需要它仅对“ rt100”的[44,48,50,55,56,57]和“ rt101”的[49,54,57,61,62,64]进行迭代。当前,它正在遍历INDEX中的所有值。 实际上,我有许多类似的对应关系,因此需要使用这些参数的查询。
更具体地说,我正在寻找一种方法来限制此循环的运行方式,以便为每个FINGER和INDEX编写每个查询以分隔如下所示的.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'
每个FINGER中的每个INDEX。
答案 0 :(得分:0)
问题在这里:
但是,对于每个FINGER值,它都会遍历整个INDEX列表
它是由以下循环引起的:
for Y in FINGER:
for X in INDEX:
# whatever
在这种情况下,将对whatever
和FINGER
中值的所有组合执行INDEX
。如果每个都有N
个值,则whatever
行将执行N*N
次。
但是您希望它仅对其中一些执行,即给定FINGER = [f1, f2, ..., fN]
和INDEX = [i1, i2, ..., iN]
,对于值N
,{{1},应该精确地(f1, i1)
个迭代},...,(f2, i2)
。
为此,请更改循环:
(fN, iN)