21

テーブルからすべての ID を選択し、それらをリストに追加してそのリストを返す次のメソッドがあります。しかし、このコードを実行すると、タプル インデックスは整数でなければならないというエラーが発生します。エラーと印刷物をメソッドとともに添付しました。

def questionIds(con):
    print 'getting all the question ids'
    cur = con.cursor()
    qIds = []
    getQuestionId = "SELECT question_id from questions_new"
    try:
        cur.execute(getQuestionId)
        for row in cur.fetchall():
            print 'printing row'
            print row
            qIds.append(str(row['question_id']))
    except Exception, e:
        traceback.print_exc()
    return qIds

私の方法が何をするかを印刷する:

Database version : 5.5.10 
getting all the question ids
printing row
(u'20090225230048AAnhStI',)
Traceback (most recent call last):
  File "YahooAnswerScraper.py", line 76, in questionIds
    qIds.append(str(row['question_id'][0]))
TypeError: tuple indices must be integers, not str
4

7 に答える 7

25

Python 標準の mysql ライブラリは、cursor.execute からタプルを返します。question_id フィールドを取得するにはrow[0]、 ではなくを使用しますrow['question_id']。フィールドは、select ステートメントに表示されるのと同じ順序で表示されます。

複数のフィールドを抽出するまともな方法は次のようなものです

for row in cursor.execute("select question_id, foo, bar from questions"):
    question_id, foo, bar = row
于 2012-09-07T20:57:43.263 に答える
2

データベースからデータを取得するには、ディクショナリ カーソルを使用します

import psycopg2
import psycopg2.extras
con = psycopg2.connect(database="test", user="test", password="test", host="localhost", port="5432")
if con != None:
    print "Connection Established..!\n"
else:
    print "Database Connection Failed..!\n"

cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)

cur.execute("SELECT * FROM emp")
rows = cur.fetchall()
for row in rows:
    print "%s %s %s" % (row["id"],row["name"],row["address"])

print "\nRecords Display Successfully"
con.commit()
con.close()
于 2015-12-23T13:03:32.163 に答える
1

整数インデックスは使用できません。それを機能させるには、以下に指定されているように DICT を宣言できます。

VarName = {}

これがうまくいくことを願っています。

于 2015-05-05T05:28:10.127 に答える
0

rowタプルです。を実行row['question_id']すると、文字列インデックスを使用してタプルにアクセスしようとすると、エラーが発生します。

于 2012-09-07T20:55:21.893 に答える