使用相同的键将变量分配给字典项

时间:2014-05-06 18:27:33

标签: python sql-server python-2.7 dictionary pymssql

我正在尝试找到一种方法,将自变量名称分配给字典中的不同项目。问题是,所有项目都使用相同的密钥。我正在使用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...

我的最终目标是为用户提供选择哪个数据库来运行进一步的查询。

2 个答案:

答案 0 :(得分: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的dict以及包含数据库名称的值。

答案 1 :(得分:0)

你想要的是建立一个结果列表。

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

请注意,您可以使用list comprehension

很好地完成此操作
>>> [row["name"] for row in cursor]
[u'master', u'tempdb', u'model', ...]