Python执行数组内多条SQL查询时read_sql_query无法识别字符串如何解决
问题根源
你存储表名的数组是二维结构,array[row]取到的不是单个字符串,是长度为1的子数组,拼接SQL后得到的也不是纯字符串,而是被[]包裹的数组对象,导致read_sql_query接收的参数不符合要求。同时你的第二个循环赋值逻辑存在问题,每次循环都会覆盖SQL变量,最终只能拿到最后一条查询的结果。
修复方案
- 取表名时提取二维数组的内层元素,把
array[row]改成array[row][0]就能拿到纯表名字符串 - 用列表存储所有查询的结果,避免结果被覆盖
修正后的代码如下:
SQL_Query = [] for row in range(len(array)): # 提取内层的表名字符串 table_name = array[row][0] SQL_Query.append(f"SELECT '{table_name}', COUNT(*) FROM {table_name}") # 用列表存储所有查询结果 sql_results = [] for query in SQL_Query: df = pd.read_sql_query(query, conn) sql_results.append(df) # 如果需要把所有结果合并成一个完整DataFrame可加下面这行 all_result = pd.concat(sql_results, ignore_index=True)
更简洁的优化写法
可以先把二维数组直接拉平成一维,省去每次取内层元素的操作:
# 拉平二维数组得到纯表名的一维数组 table_names = array.flatten() sql_results = [] for table in table_names: query = f"SELECT '{table}', COUNT(*) FROM {table}" sql_results.append(pd.read_sql_query(query, conn))
内容的提问来源于stack exchange,提问作者Sara Moradi
相关产品推荐
相关产品推荐

