我正在尝试找到一种方法,将自变量名称分配给字典中的不同项目。问题是,所有项目都使用相同的密钥。我正在使用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...
我的最终目标是为用户提供选择哪个数据库来运行进一步的查询。
答案 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', ...]