Skip to content Skip to sidebar Skip to footer

Python: Tuple Indices Must Be Integers, Not Str When Selecting From Mysql Table

I have following method that I select all the ids from table and append them to a list and return that list. But when execute this code I end up getting tuple indicies must be inte

Solution 1:

The python standard mysql library returns tuples from cursor.execute. To get at the question_id field you'd use row[0], not row['question_id']. The fields come out in the same order that they appear in the select statement.

A decent way to extract multiple fields is something like

forrowin cursor.execute("select question_id, foo, bar from questions"):
    question_id, foo, bar =row

Solution 2:

There are multiple cursor types in the MySQLdb module. The default cursor returns the data in a tuple of tuples. When we use a dictionary cursor, the data is sent in a form of Python dictionaries. This way we can refer to the data by their column names. Source

#!/usr/bin/python# -*- coding: utf-8 -*-import MySQLdb as mdb

con = mdb.connect('localhost', 'testuser', 'test623', 'testdb')

with con:

    cur = con.cursor(mdb.cursors.DictCursor)
    cur.execute("SELECT * FROM Writers LIMIT 4")

    rows = cur.fetchall()

    for row in rows:
        print row["Id"], row["Name"]

Solution 3:

I know the question is old, but I found another way to do it that I think it is better than the accepted solution. So I'll just leave it here in case anyone needs it.

When creating the cursor you can use

cur = connection.cursor(dictionary=True);

which will allow you to do exactly what you want without any additional modifications.

rows= cur.fetchall()
forrowinrows:
    print "%s %s %s" % (row["Id"], row["Name"], row["Price"])

Solution 4:

you can see here: enter link description here ,I think its your want

#!/usr/bin/python# -*- coding: utf-8 -*-

import sqlite3 as lite


con = lite.connect('test.db')    

with con:

    con.row_factory = lite.Row # its key

    cur = con.cursor() 
    cur.execute("SELECT * FROM Cars")

    rows = cur.fetchall()

    for row in rows:
        print"%s %s %s" % (row["Id"], row["Name"], row["Price"])

Solution 5:

To retrieve data from database use dictionary cursor

import psycopg2
import psycopg2.extras
con = psycopg2.connect(database="test", user="test", password="test", host="localhost", port="5432")
if con !=None:
    print "Connection Established..!\n"
else:
    print "Database Connection Failed..!\n"

cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)

cur.execute("SELECT * FROM emp")
rows= cur.fetchall()
forrowinrows:
    print "%s %s %s" % (row["id"],row["name"],row["address"])

print "\nRecords Display Successfully"
con.commit()
con.close()

Post a Comment for "Python: Tuple Indices Must Be Integers, Not Str When Selecting From Mysql Table"