4

Python と mysql.connector ライブラリについて独学するための練習用スクリプトを作成しているときに、この問題に遭遇しました。単一の列でクエリを実行して値を出力すると、次のような結果が得られます。

('tech-pc-1',) #Python 3.4.3 (u'tech-pc-1',) #Python 2.7.6

ただし、複数の列でクエリを実行して値を出力すると、必要な結果が得られます。

tech-pc-1 jdoe

Ubuntu 14.04 を実行しているサーバーでこれを実行しています。

from mysql.connector import (connection)
import datetime<br>
conn = connection.MySQLConnection(user='user',password='pass',host='host',database='db')

single_col_query = "select comp from logons where dt between %s and %s"
multi_col_query = "select comp,user from logons where dt between %s and %s"

end_dt = datetime.datetime.now()
begin_dt = datetime.datetime(end_dt.year, end_dt.month, 1, 0, 0, 0)

cursor = conn.cursor()

cursor.execute(single_col_query, (begin_dt, end_dt))
for(comp) in cursor:
    print(comp)  # ex. ('tech-pc-1',) or (u'tech-pc-1',)

cursor.execute(multi_col_query, (begin_dt, end_dt))
for(comp,user) in cursor:
    print(comp, user)  # ex. tech-pc-1 jdoe

cursor.close()
conn.close()

いくつか質問があります。

  1. なぜこれが起こるのですか?
  2. これを修正するにはどうすればよいですか?
4

1 に答える 1

6

1 つの列しか返されない場合でも、常にタプルを取得します。2 番目の例では、タプルをアンパックしますが、最初の例ではアンパックしないため、タプルの repr() が表示されます。

ループで解凍します。

for comp, in cursor:

または、印刷時に要素を直接参照するだけです。

print(comp[0])

解凍するときでも、 for ステートメントに括弧は必要ないことに注意してください。

于 2015-10-27T18:32:54.243 に答える