Python迭代查询mysql

2024-10-02 18:20:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个要从mysql数据库中提取的列名列表。每次遍历它并进行查询是一种很好的做法?你知道吗

当我这样做时,有时/随机地它似乎挂起;当我重新启动脚本时,它在不同的迭代中挂起。在我继续解释问题之前,我想知道这是不是一个坏习惯。你知道吗

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

Tags: importnumpy脚本数据库列表closeconnectornp
3条回答

尝试这样的方法…未经测试:

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

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

然后执行一次,并获取values变量中的数据

一次查询一列是非常奇怪的,因为您无法将一列中的值与另一列中的值相关联。除非您的表是一个不相关数据的抓取包(不是真正的记录,即您的表根本没有规范化),否则这将删除数据中的所有含义。如果要处理动态列或变量列,可以构建一个动态查询字符串(附加列名、逗号、列名、逗号…),然后执行该查询。我很难想象查询单个列而不是行/记录是有用的。你知道吗

相关问题 更多 >