2016-01-13 50 views
2

我有一个MySQL数据库,其中包含一个包含服务(Google,reddit等)和密码的表。我想查询数据库(SELECT * FROM pwds)并将它们添加到Python字典中,以便字典的键是服务,密码是值。例如,密码['google'] ='G4sR0 * KMVC'。这是我到目前为止有:如何使用Python和MySQL连接器检索数据

Passwords = {} #Dictionary to store service and password 
cnx = mysql.connector.connect(user='Bob', password='foobar', host='127.0.0.1', database='passwords') 
query = ("SELECT * FROM pwds") 
cursor = cnx.cursor(dictionary=True) 
cursor.execute(query) 

当我在IPython中运行这个,最后一步后,我可以看到什么在光标 enter image description here

我怎样才能得到什么光标在我的字典?我一直试图失败,我无法弄清楚。

+0

*我不想提前假设的东西,但如果这些是你的真实密码(我希望互联网神他们不是),你应该马上改变它们。*也欢迎来到SO和生活的Python方面。你不会错过.NET! – Torxed

+0

当然不是,它们只是随机生成一个我正在创建的密码管理器。我没有在网上显示真正的密码。 –

+0

你会惊讶于人们在网上犯的错误。他们看起来像半复杂的密码,通常这些在示例中不是标准。所以只是想在安全方面问问。一个很好的问题,一个友好的提示是,你有两个相同服务的密钥,因为键是独特的(你可能已经知道这一点,但是再次提醒一下,这些密钥会在python'dict'中替换为另一个密钥) – Torxed

回答

0

这应该这样做:

passwords = dict([(row["service"], row["password"]) for row in cursor]) 

或使用字典解析(在Python提供2.7+):

passwords = {row["service"]: row["password"] for row in cursor} 
0
Passwords = {} #Dictionary to store service and password 
cnx = mysql.connector.connect(user='Bob', password='foobar', host='127.0.0.1', database='passwords') 
query = ("SELECT * FROM pwds") 
cursor = cnx.cursor(dictionary=True) 
cursor.execute(query) 

for row in cursor: 
    Passwords[row['service']] = row['password'] 

这可能是你正在寻找的。
由于行实际上是从mysql库中以字典的形式返回的,因此您将像访问其他字典一样访问各行“列”。

总之,因为一本字典的工作原理是,像这样分配keyvalue

myDict = {key : val, key : val} 

与每个键都是唯一的,你会无论是在关键访问它们。

myDict = {'name' : 'Torxed', 'type' : 'Funny guy'} 
myDict['name'] 

mysql和上述字典之间的唯一区别是,mysql返回一个字典对于每一行,但将被访问的每个单独的行的方式相同。

mysqlRows = [ {'name' : 'Torxed', 'type' : 'Funny guy'}, {'name' : 'Amanda', 'type' : 'Has a panda?'} ] 
for row in mysqlRows: 
    print['name'] 

你想要的,什么是从你的mysql结果取值,并在他们自己的key-slot存储自己dictionary

Passwords[key] = val 

翻译为:

Passwords[ row['service'] ] = row['password'] 
+0

谢谢您的深入解决方案!我很感激长答案。 –

+0

@Amanda_Panda我希望它有一些用处,我主要留下深入的答案,一旦我有一些空闲时间为他们以防有人后来绊倒你的答案(偶尔googler下降)。祝你好运! – Torxed

相关问题