如何使用 Python 和 MySQL 连接器检索数据
Posted
技术标签:
【中文标题】如何使用 Python 和 MySQL 连接器检索数据【英文标题】:How to retrieve data using Python and MySQL connector 【发布时间】: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! 当然不是,它们只是为我正在制作的密码管理器随机生成的。我没有在线显示真实密码。 你会惊讶于人们在网上犯的错误。它们看起来像半复杂的密码,通常这些不是示例中的标准。所以只是想在安全方面问。一个好问题,一个友好的提醒是,您有两个具有相同服务的密钥,请记住,这些密钥将在 pythondict
中相互替换,因为密钥是唯一的(您可能已经知道这一点,但再次提醒)
嗯...关于密码密钥的要点。我更多地考虑数据库本身,其中两列都是复合主键,而不是字典本身。我会确保该服务将来使用不同的 hmac。
【参考方案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
【讨论】:
以上是关于如何使用 Python 和 MySQL 连接器检索数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 C++ Boost 或 STL 和 Mysql 存储和检索图像
如何使用 executemany 处理异常(MySQL 和 Python)