【问题标题】:Python MySQL mysql.connector use column_names property to build a returnPython MySQL mysql.connector 使用 column_names 属性构建返回
【发布时间】:2016-06-13 06:08:47
【问题描述】:

我在 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'  , 'aapple@thatcompany.com'  , '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()

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

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

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

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

如何构建一个包含在“字段”变量中找到的值的结果字典,而不必在两个不同的地方添加新的列名?

【问题讨论】:

    标签: python mysql


    【解决方案1】:

    所以,经过几个小时,我终于通过直接的反复试验找到了答案。希望这会对某人有所帮助

    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()
    

    【讨论】:

      猜你喜欢
      • 2015-02-18
      • 2019-05-10
      • 2021-07-10
      • 2015-01-31
      • 2017-03-11
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多