Python 迭代查询 mysql

Python querying mysql iteratively

我有一个要从 mysql 数据库中提取的列名列表。每次循环并查询是一种很好的做法吗?

当我这样做时,sometimes/randomly 它似乎挂起;当我重新启动脚本时,它会在不同的迭代中挂起。在我继续尝试破译问题所在之前,我想知道这是否是首先要做的不好的做法。

import mysql.connector
import numpy as np

cnx = mysql.connector.connect(user='user', password='pw', host='ip_here')
for i,j in enumerate(columnList):
   cursor.execute('SELECT `' + j + '` FROM `table_name`')
   iValues = cursor.fetchall()
   cursor.close
   if i == 0:
      extractedValues = iValues
   else:
      extractedValues = np.hstack((extractedValues, iValues))

cnx.close

一次查询一个单独的列非常奇怪,因为您无法将一列中的值与另一列相关联。除非你的 table 是一堆不相关的数据(不是真正的记录,即你的 table 根本没有规范化)这将从数据中删除所有意义。如果您正在尝试处理动态或可变列,您可以构建一个动态查询字符串(附加列名、逗号、列名、逗号...),然后执行该查询。我很难想到查询单个列而不是 rows/records 有用的场景。

试试这样的东西...未测试:

cnx = mysql.connector.connect(user='user', password='pw', host='ip_here')
cursor.execute('SELECT * FROM database.`table_name`')
iValues = cursor.fetchall()
cursor.close
cnx.close

#for i,j in enumerate(iValues):
#   if i == 0:
#      extractedValues = iValues
#   else:
#      extractedValues = np.hstack(())
extractedValues =  list(iValues)

你应该试试这个,它只会得到你需要的列,每一列都在一行中,只有一个 select:

  import mysql.connector
  import numpy as np

  cnx = mysql.connector.connect(user='user', password='pw', host='ip_here')

  cursor.execute('SELECT ' + ['`' + col + '`' for col in columnList].join(',') + ' FROM `table_name`')
  values = cursor.fetchall()

  # now values variable has the data in the columns you need

不需要 for 因为列表理解,它会生成一个 select like

  SELECT `COLa`, `COLb`, `COLc` FROM `table_name`;

然后执行一次,得到values变量

中的数据