1

私はまだpythonのコツをつかもうとしているので、我慢してください。お願いします。本から使用しているこのコードがあります。この本ではコード内の空白が適切に表示されていないため、空白は私の推測です。このコードは、MySQL クエリの結果をより読みやすい形式に分割することになっています。

if form is True:
columns_query = """DESCRIBE %s""" % (table)
print columns_query
columns_command = cursor.execute(columns_query)
headers = cursor.fetchall()
column_list = []
for record in headers:
    column_list.append(record[0])
output=""
for record in results:
    output = output + "===================================\n\n"
for field_no in xrange(0, len(column_list)):
    output = output + column_list[field_no] + ": " + str(record[field_no]) + "\n"
output = output + "\n"

実行しようとすると、次のようになります。

Traceback (most recent call last):
  File "odata_search.py", line 46, in <module>
    output = output + column_list[field_no] + ": " + str(record[field_no]) + "\n"
IndexError: tuple index out of range

それはstr(record[field_no])コードの一部と関係がありますが、それが本の中でのように見えるので、他に何を試すべきかわかりません。

4

2 に答える 2

1

明らかlen(record) != len(column_list)に。(具体的にcolumn_listは、よりも長いrecord)。それらが同じ長さであると期待する理由はありますか?

1 つの「修正」は次のようになります。

for col,rec in zip(column_list,record):
    output += col + ": " + str(rec) + "\n"

それ以外の:

for field_no in xrange(0, len(column_list)):
    output = output + column_list[field_no] + ": " + str(record[field_no]) + "\n"

column_listこれにより、 との短い方で出力が切り捨てられますrecord

zipいずれにせよ代わりに使用することをお勧めしrange(0,len(...))ます。それははるかに慣用的です。

于 2013-01-03T15:29:53.753 に答える
0

判明した問題は、空白と、さらに重要な MySQL クエリ自体の両方でした。行のすべての列をプルするのではなく、列内の行であるリストをプルしていました。これは、ループが連結するために書かれたものです。間違ったクエリの結果として返されるレコードの数は、すべての列を含むリスト内の結果の数と等しくありませんでした。コードはループ内のループであることも意図していたので、上部のスペースが間違っています。以下のように見えるはずです。変更が必要なクエリを表示するために、その前に数行追加しました。

古いステートメントは次のようにループします。

statement = """select %s from %s where %s like '%s' limit 10""" % (column, table, column, term)

次のようになります。

statement = """select * from %s where %s like '%s' limit 10""" % (table, column, term)

command = cursor.execute(statement)
results = cursor.fetchall()

column_list = []
for record in results:
    column_list.append(record[0])

ループ内でループ:

if form is True:
columns_query = """DESCRIBE %s""" % (table)
columns_command = cursor.execute(columns_query)
headers = cursor.fetchall()
column_list = []
for record in headers:
    column_list.append(record[0])
output=""
for record in results:
    output = output + "===================================\n\n"
    for field_no in xrange(0, len(column_list)):
        output = output + column_list[field_no] + ": " + str(record[field_no]) + "\n"
    output = output + "\n"
于 2013-01-06T00:08:06.707 に答える