2014-05-06 107 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', ...] 
相关问题