2016-11-02 2 views
1

グッドモーニング、パイソン - (SQLコマンドによって生成された)辞書のリストから抽出値

私はPythonでMySQLのDBで作業しようとしていると私は、テーブル名などの一部のデータを抽出する必要があります。

だから私はこのコードを実行します。

import pymysql.cursors 
conn = pymysql.connect(host='myHost', user='user', password='password', db='test', cursorclass=pymysql.cursors.DictCursor) 
a = conn.cursor() 

sql="SHOW tables like '%s%'" 
a.execute(sql) 
rows = a.fetchall() 
tables = [] 
for row in rows: 
    tables.append(row.values()) 

を私はprint(tables)を実行したときのように、それは私に結果を与える:私は必要なリストだけが['table1', 'table2', 'etc', 'etc']ある

["dict_values(['table1'])", "dict_values(['table2'])"] 

。 どうすればこの問題を解決できますか?このような問題を引き起こすのはSQL文です。

答えて

2

row.values()は、リストのように機能dict_valuesオブジェクトを返します、ありがとうございました。

あなたがそのリストで唯一の価値があることを想定することができるので、あなたがこの行置き換えることができます。これにより

tables.append(row.values()) 

tables += row.values() 

をそして、あなたが期待される結果を取得する必要があります。あなたは、このコードで唯一のOUを行くことができます

+0

の値を使用して原因このtables.append(row.values()[0])構文はどうもありがとうです! – andrepogg

1

は心に留めておく必要はありますが、辞書

import pymysql.cursors 
conn = pymysql.connect(host='myHost', user='user', password='password', db='test', cursorclass=pymysql.cursors.DictCursor) 
a = conn.cursor() 
sql="SHOW tables" 
a.execute(sql) 
tables = [] 
rows = a.fetchall() 
for row in rows: 
    tables.append(list(row.values())[0]) 
+0

戻り値:TypeError: 'dict_values'オブジェクトはインデックス化をサポートしていません – andrepogg

+0

Python 3ではrow.values()はリストの代わりにビューを返します。このため、最後の行をこのtable.append(list(row.values())[ 0])@andrepogg –

関連する問題