我有大型数据库,正在使用python中的sql查询将数据写入csv文件。在sql数据库中,每一行都是手指ID的一系列空间信息。我可以参数化查询以获取信息并为每个手指编写所需的文件。但是,在创建功能的for循环时会出现问题,该循环会遍历列表中所有索引的每个ID。
INDEX = ([44,48,50,55,56,57], [49,54,57,61,62,64])
FINGER = ('rt100', 'rt101')
d = {}
for Y,X in FINGER, INDEX:
d[Y] = 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,))
这是我当前拥有的代码,但是出现此错误:
pandas.io.sql.DatabaseError: Execution failed on 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 = ?': Error binding parameter 0 - probably unsupported type.
即使尝试为单个ID和单个索引列表尝试循环,我也会收到错误,提示要解包的值太多。 我似乎找不到找到在SQL语句中包含列表列表的方法。
要明确我要做什么。我需要为列表'[44,48,50,55,56,57]'中的每个索引遍历ID,例如'rt100',并获取数据'SELECT x,y,CAST((direction * 180 / 3.142 ),将每个索引和ID的CAST(quality * 100作为INT)' 这样会生成一个.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
答案 0 :(得分:0)
如果您需要FINGER和INDEX元素的每种组合,则应该执行以下操作:
for Y in FINGER:
for X in INDEX:
for x in X:
d[Y] = 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))
(请注意x
中的小params
)
更新,如下所示:
for i,Y in enumerate(FINGER):
for x in INDEX[i]:
d[Y] = 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))
在您的代码中,对于单个x的每次read_sql调用,d [Y]也将被覆盖,因此您可能希望使用类似d[Y,x] = ...
的东西。