首页 > 解决方案 > Python 错误:元组索引必须是整数或切片,而不是 str

问题描述

我有一个从 mysql 数据库中获取信息的功能:

def get_group_members_from_db():
    dbName = get_environ('DBNAME')
    # Establish connection to database
    try:
        db = db_establish_connection()
        if db:
            # report count sessions by role, agent version, agent type, and realm
            sql = (
                'SELECT T1.field1, T1.field2, T1.field3, T1.field4, T1.field5 ' 
                'FROM ' + dbName + '.table AS T1 ' 
                'GROUP BY T1.field1, T1.field2, T1.field3, T1.field4, T1.field5; '
            )
            cursor = db.cursor()
            cursor.execute(sql)
            result = cursor.fetchall()
            cursor.close()
            db.disconnect()
            #print(result)
            return result
    except Exception as ex:
        print(ex)

和另一个将新表插入数据库的函数:

def finding_unique_users(db,dbName):
    # Establish connection to database
    try:
        users = get_group_members_from_db()
        if db:
            # report count sessions by role, agent version, agent type, and realm
            sql = (
                
                'INSERT INTO ' + dbName + ' .table2 ( '
                'fieldA, fieldB, fieldC, fieldD, fieldE, fieldF ) ' 
                'VALUES ('
                '%s,%s,%s,%s,%s);'
            )
            values = list()
            for user in users:
                #print(users)
                if user['fieldA']:
                    values.append((
                        user['fieldA'],
                        user['fieldB'],
                        user['fieldC'],
                        user['fieldD'],
                        user['fieldE'],
                        user['fieldF']
                    ))
            cursor = db.cursor()
            cursor.execute('TRUNCATE TABLE ' + dbName + '.table2;')
            cursor.executemany(sql,values)
            db.commit()
            result = cursor.fetchall()
            cursor.close()
            return result
    except Exception as ex:
        print(ex)

运行时遇到一个错误,提示元组索引必须是整数或切片,而不是 str。当我从数据库中打印出用户时,我收到了一个元组。请帮助我进一步纠正这个错误。

标签: pythonfunctionerror-handlingtuples

解决方案


函数fetchall如果元组返回一个列表,其中第一项是 Bâle 列,第二项是值如果您更喜欢 dict 的列表,您可以构造它

res= cursor.fetchall()
cursor.close()
result = []
for raw in res:
   result.append({raw[0] : raw[1})
return result

推荐阅读