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...

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

4

2 回答 2

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 和保存数据库名称的值的字典。

于 2014-05-06T18:52:25.740 回答
0

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

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

请注意,您可以使用列表推导很好地做到这一点:

>>> [row["name"] for row in cursor]
[u'master', u'tempdb', u'model', ...]
于 2014-05-06T18:41:15.643 回答