2016-04-19 2 views
0

私はCATEGORY_IDは、MySQLデータベース内の私のテーブル名です。ここソートへのアクセスSQLAlchemyの表の列名は

{'category_id': 'women_shoes', 'product_id': 486778462L} 

の辞書を持っています。私はテーブルwomen_shoesから指定されたproduct_idを取得しようとしています。私はこのコード物事が正常に動作し、ここでティルアップ

class_name = globals()[each_itemset["category_id"].capitalize()] 
table_values = session.query(class_name).filter(class_name.product_id == each_itemset["product_id"]) 
for each in table_values:    
    print each.brand_name    
    name = "brand_name" 

を介してこれを達成することができていると私は、製品のBRAND_NAMEを取得することができています。私が欲しいのは代わりのステートメントに

print each.brand_name 

を与える私は、正確なテーブル名を自分で指定する必要はありませんので、

name = "brand_name" 
print each.name 

をしたいということです。 class_nameからテーブルのカラム名を取得したい。 テーブル .columns.keys()を繰り返し、各カラム名を取得して1つずつ名前に渡します。

私はこの

Traceback (most recent call last): 
    File "main_site.py", line 14, in <module> 
    json_data = db_access.get_styles_from_db("work") 
    File "C:\Python27\Projects\Clothe Studio Recommendation Project\util\db_access.py", line 149, in get_styles_from_db 
    calc_outfit_scores(outfit_dict, session) 
    File "C:\Python27\Projects\Clothe Studio Recommendation Project\util\db_access.py", line 192, in calc_outfit_scores 
    print each.name 
AttributeError: 'Women_shoes' object has no attribute 'name' 

を行うときに、私は次のエラーを取得する私は、SQLAlchemyのドキュメントを通じて検索およびSOが、答えを見つけるように見えることはありませんしています。このシナリオで何をすべきか?あなたの助けに感謝します。

+0

質問を明確に伝えるために、質問を投稿する前に確認してください。たとえば、 'each_itemset'はどこで定義されましたか? 'each_itemset'はあなたが上で定義したdictだと推測できますが、これをちょうどよく見直して提出するためのヒントにしてください。あなたもより良い反応を得るでしょう! – Amir

+0

私は実際に目標が何であるかはわかりませんが、あなたの主張する声明はちょっと奇妙です。変数に静的な文字列を割り当て、存在しない属性にアクセスしようとします。しかし、もしあなたがオブジェクト辞書を見ようとしているのであれば、組み込みのpythonを使って 'each .__ dict__'と同じくらい単純なことができます。 'name = each.brand_name'を割り当てて、' each.name'の代わりに 'name'を使うだけです。 – Busturdust

+0

あなたの提案に感謝Amir。私はこれを念頭に置いておきます。 – Falconic

答えて

1

あなたは、単にオブジェクトの辞書を生成しようとしている場合は、属性:値は、あなたが使用できるすべての外国人がある場合は、あなたの場合

for each in table_values:    
    print each.__dict__ 

__dict__

をdictionay属性Pythonオブジェクトに建てられましたあなたが従う/使用したいキーやキャストのようなメカニズムを使用する場合は、クラスのカスタムto_dict()メソッドを実装し、それを使用する必要があります。

0

getattrより一般的な方法で属性を指定します。

for each in table_values:  
    name = 'brand_name' 
    value = getattr(each, name) 
    print(value) 
関連する問題