Python: tuple indices must be integers, not str when selecting from mysql table

前端 未结 7 1553
梦谈多话
梦谈多话 2021-01-01 14:08

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

相关标签:
7条回答
  • 2021-01-01 14:39

    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"]
    
    0 讨论(0)
  • 2021-01-01 14:41

    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()
    for row in rows:
        print "%s %s %s" % (row["Id"], row["Name"], row["Price"])
    
    0 讨论(0)
  • 2021-01-01 14:46

    Integer indices are not allowed. To get it working you can declare the DICT as specified below:

    VarName = {}
    

    Hope this works for you.

    0 讨论(0)
  • 2021-01-01 14:51

    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

    for row in cursor.execute("select question_id, foo, bar from questions"):
        question_id, foo, bar = row
    
    0 讨论(0)
  • 2021-01-01 14:53

    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()
    for row in rows:
        print "%s %s %s" % (row["id"],row["name"],row["address"])
    
    print "\nRecords Display Successfully"
    con.commit()
    con.close()
    
    0 讨论(0)
  • 2021-01-01 14:58

    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"])
    
    0 讨论(0)
提交回复
热议问题