使用变量访问SQLAlchemy表列名

时间:2016-04-19 21:54:41

标签: python mysql pandas sqlalchemy

我有一个排序词典

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

这里category_id是我在MYSQL数据库中的表名。我想从表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。 table .columns.keys()获取表列名,并迭代它以获取每个列名并逐个提供它。

我这样做时出现以下错误

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文档,但似乎没有找到答案。在这种情况下应该做些什么?感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如果您只是尝试生成对象属性的字典:值,则可以使用内置的python对象属性dictionay __dict__

在你的情况下

for each in table_values:               
    print each.__dict__

如果您希望关注/使用任何外键或类似机制,则需要为该类实现自定义to_dict()方法,并使用该方法

答案 1 :(得分:0)

您可以使用getattr以更通用的方式检索属性。

for each in table_values:      
    name = 'brand_name'
    value = getattr(each, name)
    print(value)