繁体   English   中英

使用变量访问SQLAlchemy表列名

[英]Accessing SQLAlchemy table column names with variables

我有一本字典

{'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"

到目前为止,一切正常,我能够获得产品的品牌名称。 我想要的是,而不是给出声明

print each.brand_name

我想要做

name = "brand_name"
print each.name

因为我不想自己指定确切的表名。 我想从class_name获取表列名称。 .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文档和SO,但似乎找不到答案。 在这种情况下应该做什么? 感谢您的帮助。

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

在你的情况下

for each in table_values:               
    print each.__dict__

如果您想要遵循/使用任何外键或to_dict()类机制,则需要为该类实现一个自定义的to_dict()方法,并使用该方法

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM