Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫';读取带有WHERE条件值列表的sql_Python_Mysql_Pandas - Fatal编程技术网

Python 熊猫';读取带有WHERE条件值列表的sql

Python 熊猫';读取带有WHERE条件值列表的sql,python,mysql,pandas,Python,Mysql,Pandas,假设一个数据帧scoreDF: date time score sec_code 1048 2015-02-25 09:21:00 28 2888 2015-02-25 09:21:00 25 945 2015-02-25 09:21:00 23 4 2015-02-25 09:21:00 22 669 2015-02-25 09:21:00 15 我需

假设一个数据帧
scoreDF

          date       time      score
sec_code
1048      2015-02-25 09:21:00     28
2888      2015-02-25 09:21:00     25
945       2015-02-25 09:21:00     23
4         2015-02-25 09:21:00     22
669       2015-02-25 09:21:00     15
我需要进行MySQL查询,以检索与
scoreDF.index
中的值匹配的所有行,即
sec\u code

通常我会做一个循环:

    finalResultDF = DataFrame()

    queryString = 'SELECT * FROM tableA WHERE sec_code = ' + code

    for code in scoreDF.index:
        queryResultDF = sql.read_sql(queryString, con)
        finalResultDF.append(queryResultDF)

如果没有一个循环传递一个值列表,例如,
scoreDF.index
作为WHERE条件,是否可以进行不同的操作?我在谷歌上搜索了几个小时,有人提到“参数”来阅读sql,但我想不出来。

实际上,你可以不用任何循环来完成这项工作

queryString = 'SELECT * FROM tableA WHERE sec_code in '+tuple(scoreDF.index)

这将直接给出结果。这是假设
scoreDF.index
是一个
列表
。如果它已经是一个
元组
,那么就不需要进行类型转换。

正如bolec_kolec建议的那样,我认为最好的做法是在调用read_sql时使用
参数
。我通常是这样做的(Python 3.7):


工作起来很有魅力。非常感谢。我需要str(tuple(scoreDF.index))来避免错误。(我想是由于Python3的缘故)我还需要str(tuple(scoreDF.index)),我正在使用Python2.7,您应该在read_sql中使用
params
参数来避免sql注入
scoreIndex = scoreDF.index.tolist() 
queryString = 'SELECT * FROM tableA WHERE sec_code = ANY(%(scoreIndex)s)'

queryParams = {'scoreIndex': scoreIndex}
queryResultDF = sql.read_sql(sql = queryString, con, params = queryParams)