如何使用 Python 和 MySQL 连接器检索数据

How to retrieve data using Python and MySQL connector

我有一个 MySQL 数据库,其中 table 包含一项服务(google、reddit 等)和一个密码。我想查询 db (SELECT * FROM pwds) 并将它们添加到 Python 字典中,以便字典的键是服务,值是密码。例如,密码['google']='G4sR0*KMVC'。这是我目前所拥有的:

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 中 运行 this 时,在最后一步之后,我可以看到光标中的内容

如何获取字典中光标处的内容?一直试不成功,想不通

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 库中作为字典返回的,因此您将像访问任何其他字典一样访问单个行 "columns"。

简而言之,因为字典是通过将 key 分配给 value 来工作的,就像这样:

myDict = {key : val, key : val}

每个密钥都是唯一的,您可以使用密钥中的任何内容访问它们。

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

mysql 和上面的字典之间的唯一区别是 mysql returns 每行一个字典,但它会以相同的方式访问每一行。

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']

应该这样做:

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

或者使用字典理解(在 Python 2.7+ 中可用):

passwords = {row["service"]: row["password"] for row in cursor}