我正在尝试使用MySQL表来存储报告定义的属性。由于每个报告都使用不同的属性,我想存储三列 - report_name,attribute,attribute_value。
我想在表中查询report_name并获取相关属性和attribute_values。我在其他问题中看到过可以使用
exec("%s = %s" % (row[0], (row[1],)))
动态设置变量名称(row [0]是属性,row [1]是attribute_value)。我的问题是,结果是生成的变量是元组。
title_text = ('Daily PnL',)
title_text是属性。 'Daily 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 :(得分:0)
我真的不知道我的问题是否正确,所以如果我的解决方案无法帮助您,请更好地解释一下,以便我可以帮助您。
如果你有
title_text = ('Daily PnL',)
尝试:
title_text = title_text[0]
将Tulpe转换为简单的字符串。如果你想要彼此分开(所以&#39;每日&#39;来自&#39; PnL&#39;)而不是仅仅使用title_text上的.split()方法。
答案 1 :(得分:0)
刚想通了。我需要&#39;&#39;在第二个%s附近,因为它是一个字符串。
exec("%s = '%s'" % (row[0], row[1]))