【问题标题】:How to retrieve data using Python and MySQL connector如何使用 Python 和 MySQL 连接器检索数据
【发布时间】:2016-04-18 19:55:29
【问题描述】:

我有一个 MySQL 数据库,其中包含一个包含服务(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 中运行它时,在最后一步之后,我可以看到光标中的内容

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

【问题讨论】:

  • 我不想提前假设,但如果这些是您的真实密码(我希望互联网之神不是),您可能应该正确更改它们 也欢迎来到 SO 和 Python 生活的一面。您不会错过 .NET!
  • 当然不是,它们只是为我正在制作的密码管理器随机生成的。我没有在线显示真实密码。
  • 你会惊讶于人们在网上犯的错误。它们看起来像半复杂的密码,通常这些不是示例中的标准。所以只是想在安全方面问。一个好问题,一个友好的提醒是,您有两个具有相同服务的密钥,请记住,这些密钥将在 python dict 中相互替换,因为密钥是唯一的(您可能已经知道这一点,但再次提醒)
  • 嗯...关于密码密钥的要点。我更多地考虑数据库本身,其中两列都是复合主键,而不是字典本身。我会确保该服务将来使用不同的 hmac。

标签: python mysql mysql-connector


【解决方案1】:
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 库的 dict 返回的,因此您将像访问任何其他 dict 一样访问单个行“列”。

简而言之,由于字典通过将key 分配给value 来工作,如下所示:

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

【讨论】:

  • 感谢您的深入解决方案!我很欣赏长格式的答案。
  • @Amanda_Panda 我希望它有一些用处,我主要是在我有空余时间为他们留下深入的答案,以防以后有人偶然发现你的答案(偶尔的 googler 路过)。祝你好运!
【解决方案2】:

应该这样做:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-04-04
    • 2021-11-17
    • 1970-01-01
    • 2018-10-24
    • 2011-02-25
    • 1970-01-01
    • 2019-06-15
    • 2011-04-03
    相关资源
    最近更新 更多