0

mysql テーブルからデータを取得するこのコードがあります。Python の MySQLdb モジュールを使用しています。SELECT WHERE 条件に基づく各列のデータを配列で取得したい。たとえば、以下のコードでは、場所フィールドが 'NY, US' であるすべてのデータを異なる配列で取得する必要があります。各配列は異なる列の値を表します。

import numpy
import MySQLdb

db = MySQLdb.connect("localhost", "root", "", "test")
cursor = db.cursor()

sql = "SELECT * FROM usa_new WHERE location = 'NY, US'"
try:
   cursor.execute(sql)
   results = cursor.fetchall()
   discresults = {}
   for row in results:

      id = row[0]
      location = row[1]
      temp_f = row[2]
      pressure_mb = row[3]
      wind_dir = row[4]
      wind_mph = row[5]
      relative_humidity = row[6]
      timestamp = row[7]

except:
   print "Error: unable to fecth data"

db.close()

何か問題がありますか?

4

2 に答える 2

2

Pythonには、配列として使用できる「リスト」と呼ばれるデータ構造があります。あなたの質問のセマンティックが「ローカルリストに格納するために、列ごとに分類された配列で結果を取得する」であると理解した場合、ここで実行できる簡単な実装があります。指定された基準に一致する行を1つずつフェッチしたことを思い出してください。その良い習慣として;

import MySQLdb

db = MySQLdb.connect("localhost", "root", "", "test")
cursor = db.cursor()
id, location, temp_fm, pressure_mb, .. = [],[],[],[],...
//for the number of lists you want to create, just add their names and a empty list
sql = "SELECT * FROM usa_new WHERE location = 'NY, US'"

try:
   cursor.execute(sql)

   rcount = int(cursor.rowcount)

   for r in rcount:
      row = cursor.fetchone()

      id.append(row[0])
      location.append(row[1])
      temp_f.append(row[2])
      pressure_mb.append(row[3])
      wind_dir.append(row[4])
      wind_mph.append(row[5])
      relative_humidity.append(row[6])
      timestamp.append(row[7])

except:
   print "Error: unable to fecth data"

db.close()
于 2012-11-18T12:06:33.370 に答える
0

resultsfromを取得したらcursor.fetchall()、結果を numpy 配列にマップすることができます:-

cols = zip( *results ) # return a list of each column
                      # ( the * unpacks the 1st level of the tuple )
outlist = []

for col in cols:

    arr = numpy.asarray( col )

    type = arr.dtype

    if str(type)[0:2] == '|S':
        # it's a string array!
        outlist.append( arr )
    else:
        outlist.append( numpy.asarray(arr, numpy.float32) ) 
于 2012-11-18T12:03:14.870 に答える