TypeError: tuple indices must be integers, not str

后端 未结 5 520
孤街浪徒
孤街浪徒 2021-02-01 13:31

I am trying to pull data from a database and assign them to different lists. This specific error is giving me a lot of trouble \"TypeError: tuple indices must be integers, not s

相关标签:
5条回答
  • 2021-02-01 14:18

    I think you should do

    for index, row in result: 
    

    If you wanna access by name.

    0 讨论(0)
  • 2021-02-01 14:20

    Just adding a parameter like the below worked for me.

    cursor=conn.cursor(dictionary=True)
    

    I hope this would be helpful either.

    0 讨论(0)
  • 2021-02-01 14:31

    The Problem is how you access row

    Specifically row["waocs"] and row["pool_number"] of ocs[row["pool_number"]]=int(row["waocs"])

    If you look up the official-documentation of fetchall() you find.

    The method fetches all (or all remaining) rows of a query result set and returns a list of tuples.

    Therefore you have to access the values of rows with row[__integer__] like row[0]

    0 讨论(0)
  • 2021-02-01 14:36

    TL;DR: add the parameter cursorclass=MySQLdb.cursors.DictCursor at the end of your MySQLdb.connect.


    I had a working code and the DB moved, I had to change the host/user/pass. After this change, my code stopped working and I started getting this error. Upon closer inspection, I copy-pasted the connection string on a place that had an extra directive. The old code read like:

     conn = MySQLdb.connect(host="oldhost",
                            user="olduser",
                            passwd="oldpass",
                            db="olddb", 
                            cursorclass=MySQLdb.cursors.DictCursor)
    

    Which was replaced by:

     conn = MySQLdb.connect(host="newhost",
                            user="newuser",
                            passwd="newpass",
                            db="newdb")
    

    The parameter cursorclass=MySQLdb.cursors.DictCursor at the end was making python allow me to access the rows using the column names as index. But the poor copy-paste eliminated that, yielding the error.

    So, as an alternative to the solutions already presented, you can also add this parameter and access the rows in the way you originally wanted. ^_^ I hope this helps others.

    0 讨论(0)
  • 2021-02-01 14:37

    Like the error says, row is a tuple, so you can't do row["pool_number"]. You need to use the index: row[0].

    0 讨论(0)
提交回复
热议问题