2014-05-06 47 views
1

我試圖找到一種方法將自變量名稱分配給字典中的不同項目。問題是,所有項目都使用相同的密鑰。我正在使用PYMSSQL來查詢數據庫服務器以獲取數據庫名稱列表。將變量賦值給具有相同密鑰的字典項目

conn = pymssql.connect(DBServer, DBUser, DBPass, 'master') 
cursor = conn.cursor(as_dict=True) 
##print 'On the following prompt, please enter the SQL command you wish to execute.' 
##query = raw_input(">>") 
cursor.execute(""" 
Select name from msdb.sys.databases 
""") 
for row in cursor: 
    print row 
    print '-----------------------------' 

conn.close() 

這是給我的輸出:

{u'name': u'master'} 
----------------------------- 
{u'name': u'tempdb'} 
----------------------------- 
{u'name': u'model'} 
----------------------------- 
{u'name': u'msdb'} 
----------------------------- 
{u'name': u'MIADMS'} 
----------------------------- 
{u'name': u'Active'} 
----------------------------- 

正如你可以看到,每一個項目都是一樣name項下。我想要做的是每個條目指定一個特定的變量,如:

DB1 = master 
DB2 = tempdb 
DB3 = mode1 
DB4 = msdb 
etc... 

我的最終目標,是爲用戶提供一個選擇,其中DB運行對進一步查詢。

+0

將名字改爲列表可能更好。 – BrenBarn

回答

1

你問究竟什麼:

for row in enumerate(cursor): 
    exec("DB{0} = row[1][u'name']".format(row[0] + 1)) 

這將動態地創建變量DB1,DB2,... ,DBn

但實際上你可能想要:

x = {"DB{0}".format(row[0] + 1): row[1][u"name"] for row in enumerate(cursor)} 

這實際上會創建一個帶鍵DB1,DB2,...,DBn和持有數據庫名稱的值的字典。

+0

這工作完美。謝謝! – user3492006

+1

總是樂於提供幫助。你也可以贊成嗎? – ElmoVanKielmo

+0

還沒有足夠的代表,遺憾的芽。 – user3492006

0

你想要的是建立一個結果列表。

names = [] 
for row in cursor: 
    names.append(row["name"]) 

注意,你可以做到這一點很好地使用list comprehension

>>> [row["name"] for row in cursor] 
[u'master', u'tempdb', u'model', ...] 
相關問題