2017-04-26 184 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])) 
相關問題