首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫sqlite read_sql动态从句

熊猫sqlite read_sql动态从句
EN

Stack Overflow用户
提问于 2020-12-21 12:09:24
回答 2查看 291关注 0票数 1

我试图使用熊猫read_sql函数来查询来自sqlite的一些数据。我需要使用参数化SQL,它包含子句(List)和一些静态参数。

以下是我的查询

代码语言:javascript
复制
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}')

我使用格式适当地添加了占位符。

代码语言:javascript
复制
battingDataQuery = battingDataQuery.format('?', ','.join('?' * len(playerIdList)))

生成的SQL如下所示

代码语言:javascript
复制
'SELECT ID FROM BATTING_DATA WHERE ID in (?,?,?,?,?) AND DOWN_NUM < ? AND MATCH_TYPE = ?'

我被困在最后一部分,在这里我发送参数如下:

代码语言:javascript
复制
battingDataDF = pd.read_sql_query(battingDataQuery , conn, params=(playerIdList,battingDownNum,'\'T20\''))

在使用以下错误时,我会收到以下错误

提供的绑定数不正确。当前语句使用7,并提供了3。

我试过使用以下变体,但仍然得到相同的错误

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-21 13:10:55

您应该为您的7个问号提供一个包含7个参数的列表:

代码语言:javascript
复制
battingDataDF = pd.read_sql_query(battingDataQuery , conn, params=playerIdList + [battingDownNum, "'T20'"])

(您提供了3个参数:包含5个数字、一个数字和一个字符串的列表,因此出现了错误)

票数 1
EN

Stack Overflow用户

发布于 2020-12-25 16:59:11

给出的答案是我的@stef成功了,但我找到了另一个有用的变体。所以为了完成这件事

代码语言:javascript
复制
battingDataDF = pd.read_sql_query(battingDataQuery , conn, params=(*playerIdList,battingDownNum,matchType))

*将列表解压缩,从而提供正确的参数数。

不确定哪种方法更好。如果有人能在这上面放点光,那就太好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65392539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档