2017-04-26 178 views
-1

我正在尝试使用MySQL表来存储报表定义的属性。由于每个报告使用不同的属性,我想要存储三列 - report_name,attribute,attribute_value。python - 如何创建变量并从数据表中设置其值

我想查询表的report_name并获取相关的属性和attribute_values。我已经在其他问题看出,人们可以使用

exec("%s = %s" % (row[0], (row[1],))) 

动态设置变量的名称(行[0]是属性,行[1]是ATTRIBUTE_VALUE)。我的问题是,结果是变量是元组。

title_text = ('Daily PnL',) 

title_text是属性。 '每日PnL'是attribute_value。

我不能简单地说

exec("%s = %s" % (row[0], row[1])) 

我得到的错误是:

Traceback (most recent call last): 
    File "C:\...\test_dynamic_variables.py", line 17, in <module> 
     exec("%s = %s" % (row[0], row[1])) 
    File "<string>", line 1, in <module> 
NameError: name 'Daily PnL' is not defined 

这里是更大的一组代码:

import mysql.connector 
from mysql.connector import errorcode 

cnx = mysql.connector.connect(user='xxxx', password='xxxx', database='xxxx') 
cursor = cnx.cursor() 

query = ("SELECT attribute, attribute_value FROM reports WHERE report_name = %s") 
report_name = 'Daily' 

try: 
    cursor.execute(query, (report_name,)) 
except mysql.connector.Error as err: 
    print(err.msg) 

row = cursor.fetchone() 
while row is not None: 
    exec("%s = %s" % (row[0], row[1])) 
    row = cursor.fetchone() 

print(title_text)  #test if works 

感谢您帮帮我。

+0

ok。只是想出了如何正确格式化。抱歉的混淆。 – Andrew

回答

0

我真的不知道我的问题是否正确,所以请解释一下,如果我的解决方案不能帮助您,以便我可以帮助您。

如果你有

title_text = ('Daily PnL',)

不是尝试:

title_text = title_text[0] 

其中转换的Tulpe到一个简单的字符串。如果你不想在title_text上使用.split()方法,那么两者都要彼此分开(所以'每日'与'PnL')。

+0

不知道我怎么做,当我事先不知道哪个属性将被使用。 exec()调用的目的是从数据库中的列创建变量名称,然后将该变量设置为等于数据库中的另一列。如何第二次引用该属性以将元组拆分为字符串? – Andrew

+0

要清楚,我不知道变量名称将是title_text直到我查询MySQL表并获取两列,属性和attribute_value。在查询之后,我想使用属性列中的值来命名变量,然后将它们设置为等于attribute_value列中的值。 – Andrew

0

只是想通了。因为它是一个字符串,所以我需要在第二个%s周围。

exec("%s = '%s'" % (row[0], row[1])) 
相关问题