我试图使用熊猫read_sql函数来查询来自sqlite的一些数据。我需要使用参数化SQL,它包含子句(List)和一些静态参数。
以下是我的查询
battingDataQuery = ('SELECT ID, MATCH_DATE, ROLE, DOWN_NUM, NAME, RUNS,'
'MATCH_ID, TEAM_NAME, VERSUS_TEAM_NAME, GROUND_NAME '
'FROM BATTING_DATA WHERE ID in ({1}) '
'AND DOWN_NUM < {0} AND MATCH_TYPE = {0}')我使用格式适当地添加了占位符。
battingDataQuery = battingDataQuery.format('?', ','.join('?' * len(playerIdList)))生成的SQL如下所示
'SELECT ID FROM BATTING_DATA WHERE ID in (?,?,?,?,?) AND DOWN_NUM < ? AND MATCH_TYPE = ?'我被困在最后一部分,在这里我发送参数如下:
battingDataDF = pd.read_sql_query(battingDataQuery , conn, params=(playerIdList,battingDownNum,'\'T20\''))在使用以下错误时,我会收到以下错误
提供的绑定数不正确。当前语句使用7,并提供了3。
我试过使用以下变体,但仍然得到相同的错误
battingDataDF = pd.read_sql_query(battingDataQuery , conn, params=[playerIdList,battingDownNum,'\'T20\'']) # same error
battingDataDF = pd.read_sql_query(battingDataQuery , conn, params=[playerIdList,battingDownNum,'\'T20\'']) # same error
battingDataDF = pd.read_sql_query(battingDataQuery , conn, params=[tuple(playerIdList),battingDownNum,'\'T20\'']) # same error发布于 2020-12-21 13:10:55
您应该为您的7个问号提供一个包含7个参数的列表:
battingDataDF = pd.read_sql_query(battingDataQuery , conn, params=playerIdList + [battingDownNum, "'T20'"])(您提供了3个参数:包含5个数字、一个数字和一个字符串的列表,因此出现了错误)
发布于 2020-12-25 16:59:11
给出的答案是我的@stef成功了,但我找到了另一个有用的变体。所以为了完成这件事
battingDataDF = pd.read_sql_query(battingDataQuery , conn, params=(*playerIdList,battingDownNum,matchType))*将列表解压缩,从而提供正确的参数数。
不确定哪种方法更好。如果有人能在这上面放点光,那就太好了。
https://stackoverflow.com/questions/65392539
复制相似问题