【问题标题】:Python - execute multiple SQL queries in a array in pythonPython - 在python的数组中执行多个SQL查询
【发布时间】:2021-11-18 05:41:09
【问题描述】:

我将在 python 中执行多个 SQL 查询,但我认为因为它们在数组中,所以有一些额外的字符,例如 [" "] read_sql_query 函数无法执行它们,或者可能还有另一个问题。有谁知道我该如何解决这个问题?

我的数组:

array([['F_TABLE1'],
   ['F_TABLE2'],
   ['F_TABLE3'],
   ['F_TABLE4'],
   ['F_TABLE5'],
   ['F_TABLE6'],
   ['F_TABLE1'],
   ['F_TABLE8']], dtype=object)

我的python代码:

SQL_Query = []
for row in range(len(array)):
      SQL_Query.append('SELECT ' + "'" + array[row] + "'" + ', COUNT(*) FROM ' + array[row]) 
SQL = []
for row in range(len(SQL_Query)):
      SQL = pd.read_sql_query(SQL_Query[row], conn) 

PS:我将它们分成两个for,看看我的代码有什么问题。

我还打印其中一个数组以查看我的数组的输出。

print(SQL_Query[0])

输出:

["SELECT 'F_CLINICCPARTY_HIDDEN', COUNT(*) FROM F_TABLE1"]

由于上面的输出,我认为问题是多余的字符。

它给了我这个错误:

Execution failed on sql '["SELECT 'F_TABLE1', COUNT(*) FROM F_TABLE1"]': expecting string or bytes object

【问题讨论】:

  • 尝试使用 array[row][0] 而不是 array[row] 或 SQL_Query[row] 到 SQL_Query[row][0]
  • 谢谢,但是当我写 array[row][0] 时它只给了一行,我想要整个 8 行。(最后一行)
  • 在你的第一个 for 循环中替换这一行:SQL_Query.append('SELECT ' + "'" + array[row] + "'" + ', COUNT() FROM ' + array [row]) with SQL_Query.append('SELECT ' + "'" + array[row][0] + "'" + ', COUNT() FROM ' + array[row][0])
  • 然后你也可以在第二个 for 循环中改变:SQL = pd.read_sql_query(SQL_Query[row], conn) to SQL = pd.read_sql_query(SQL_Query[row], conn) to SQL = pd.read_sql_query(SQL_Query[row][0], conn)
  • 是的,我这样做了,但是对于第二个循环,当我打印数据框时,它只给了我最后一行。

标签: python sql oracle


【解决方案1】:

您好,出现此类问题的原因是当获取像 array[row] 这样的 numpy 数组值时,会产生 numpy 对象。即使在基本的数组术语中,numpy 的行为方式看起来也不同。使用item 方法解决问题。

根据您的数组,我在其中编写了一个示例代码,我只引用同一个数组对象而不是列和表。

import numpy as np
array1 = np.array([['F_TABLE1'],
   ['F_TABLE2'],
   ['F_TABLE3'],
   ['F_TABLE4'],
   ['F_TABLE5'],
   ['F_TABLE6'],
   ['F_TABLE1'],
   ['F_TABLE8']], dtype=object)

SQL_Query = []
for row in range(len(array1)):
      SQL_Query.append("SELECT  \'{0}\',COUNT(*) FROM {1}".format(str(array1.item(row)),str(array1.item(row))) ) 
print(SQL_Query)

随意使用两个数组对象来选择 SQL 列和表。

不建议在查询中选择列名时使用 ''。我已将其包含在此答案中,因为我对目标数据库类型一无所知。

【讨论】:

    【解决方案2】:

    我将我的查询更改为这个(输入 * 帮助我省略了其他字符):

    SQL_Query = []
    for row in range(len(array)):
         SQL_Query.append('SELECT ' + "'" + array[row] + "'" AS tableName + ', COUNT(*) AS Count FROM ' + array[row]) 
    SQL = []
    for row in range(len(SQL_Query)):
         SQL.append(pd.read_sql_query(*SQL_Query[row], conn))  
    result = []
    for item in SQL:
         result.append(item)
    result = pd.concat(result)
    result  
    

    我的输出:

    tableName Count
    F_TABLE1 20
    F_TABLE2 30
    F_TABLE3 220
    F_TABLE4 50
    F_TABLE5 10
    F_TABLE6 2130
    F_TABLE7 250

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2017-05-13
      • 2023-02-05
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 2022-07-06
      相关资源
      最近更新 更多