Python MySQL mysql.connector 使用column_names属性构建返回

标签 python mysql

我在 Python 脚本中使用 MySQL 提供的 MySQL 连接器。我可以成功查询数据,但是,构建返回给我带来了一些问题。

这是一个基本的数据库表

CREATE TABLE users(
uuid char(64) not null primary key,
firstname varchar(32) not null,
lastname varchar(32) not null,
email varchar(64) not null,
user_name varchar(32) not null,
password varchar(64) not null
);

INSERT INTO users VALUES
('7503637e-b8a7-44c2-822b-69ccb8ebfae0', 'Andy' , 'Apple'  , '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="53323223233f3613273b3227303c3e23323d2a7d303c3e" rel="noreferrer noopener nofollow">[email protected]</a>'  , 'aaple'  , 'abc123')

这是一个简单的 Python 脚本

import mysql.connector

config = {
    'host' : '127.0.0.1',
    'user': 'root',
    'password' : 'password',
    'database' : 'database'
}

fields = ('uuid', 'firstname', 'lastname')
query = 'SELECT ' + ', '.join(fields) + ' FROM users'

cnx = mysql.connector.connect(**mysqlConfig)
cursor = cnx.cursor()
cursor.execute(query)

results = {}
for (uuid, firstname, lastname) in cursor:
    results[uuid] = {
        'first_name': firstname,
        'last_name' : lastname
    }

cursor.close()
cnx.close()

虽然这有效,但我正在尝试找出一种动态构建结果变量的方法。我不想向 fields 变量以及 for 循环中的元组添加新的字段名称。

我一直在尝试找出一种使用此代码来完成此任务的方法

columnNames = cursor.column_names
# columnNames = (u'uuid', u'fname', u'lname')

但是,cursor.column_names 返回一个字符串元组。

如何构建一个包含“fields”变量中找到的值的结果字典,而不必在两个单独的位置添加新的列名称?

最佳答案

所以,经过几个小时后,我终于通过不断的尝试和错误找到了答案。希望这会对某人有所帮助

import mysql.connector

config = {
    'host' : '127.0.0.1',
    'user': 'root',
    'password' : 'password',
    'database' : 'database'
}

fields = ('uuid', 'firstname', 'lastname')
query = 'SELECT ' + ', '.join(fields) + ' FROM users'

cnx = mysql.connector.connect(**mysqlConfig)
cursor = cnx.cursor()
cursor.execute(query)

results = []

row = self.cursor.fetchone()
while row is not None:
    recordData = dict(zip(self.cursor.column_names, row))
    results.append(recordData)
    row = self.cursor.fetchone()


cursor.close()
cnx.close()

这将返回包含数据的字典列表。如果您想通过 SQLite 完成此操作,请在 while 循环中使用以下代码

resultSet = []
rowPosition = 0

row = self.cursor.fetchone()

while row is not None:
    rowDictionary = {}

    for columnName in row.keys():
        rowDictionary[columnName] = row[rowPosition]
        rowPosition += 1

    rowPosition = 0
    resultSet.append(rowDictionary)
    row = self.cursor.fetchone()

关于Python MySQL mysql.connector 使用column_names属性构建返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35712494/

相关文章:

python - BeautifulSoup 中 "findAll"和 "find_all"之间的区别

python - 用空格分隔值到 ndarray

python - 在带有日期的python中有条件地删除行

PHP MySQL 从 CSV 文件上传加载数据 INFILE

python - 自定义Python获取BDay范围

android - 如何在 Android 中立即从服务器获取新数据?

mysql - ALTER DATABASE 更改 COLLATE 不起作用

python - Flask、SQLAlchemy 和多线程 : MySQL too many connections

mysql - 从索引表中高效查询

python - 如何使用 urllib3 打印原始 html 字符串?