0

私はこのコードを持っています。

cursor.execute("select id, name from client")
clientids= cursor.fetchall()
clientidList = []
for clientid in clientids:
    #I can do that
    clientidList.append(clientid [0])
    #but I can't do that.
    clientidList.append(clientid ['id'])

2回目の試行でエラーが発生しましたがTypeError: 'tuple' object is not callable
、なぜこれが不可能なのですか?20を超える列が出力されるクエリでは、インデックスよりも属性名を入力した方が包括的であるため、これを実現する方法は他にありますか。私はこれを試しましたが、うまくいきませんでした

ありがとう!

4

2 に答える 2

1

これを試して:

import mysql.connector

db_config = {
    'user': 'root',
    'password': 'root',
    'port' : '8889',
    'host': '127.0.0.1',
    'database': 'clients_db'
}
cnx = {} # Connection placeholder

cnx = mysql.connector.connect(**db_config)

cur = cnx.cursor()
cur.execute('SELECT id FROM client')

columns = cur.column_names

clientids = []

for (entry) in cur:
    count = 0
    buffer = {}

    for row in entry:
        buffer[columns[count]] = row
        count += 1

    clientids.append(buffer)


cur.close()

clientidList = []

for client in clientids:
   clientidList.append(client['id'])

pprint.pprint(clientids)
pprint.pprint(clientidList)

アップデート

行名も選択するようにコードを更新しました。絶対確実ではないと思います。いくつかテストしてください:)

于 2013-03-24T22:00:58.007 に答える
1

35分のreshearchの後、私はこの投稿descriptionを見つけました:そして解決策は、この行を追加して、組み込み関数を使用してインデックスを列名に変更することでした。

name_to_index = dict( (d[0], i) for i, d in enumerate(cursor.description) )

そして、私が後にしなければならないのは、次のような新しい関数を呼び出すことだけです。

clientidList = []
for clientid in clientids:
    clientidList.append(clientid[name_to_index['id']])
于 2013-03-24T22:44:23.543 に答える