我在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 循环中的字段变量和元组中添加新的字段名称。
我一直在尝试找出一种使用此代码完成此操作的方法
columnNames = cursor.column_names
# columnNames = (u'uuid', u'fname', u'lname')
但是,cursor.column_names返回字符串元组。
如何构建包含"fields"变量中找到的值的结果字典,而不必在 2 个单独的位置添加新的列名?
所以,经过几个小时,我终于通过直接的反复试验找到了答案。希望这会帮助某人
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()