Python MySQLDB: Get the result of fetchall in a list

前端 未结 7 1337
攒了一身酷
攒了一身酷 2020-12-01 07:24

I would like to get the result of the fetchall operation in a list instead of tuple of tuple or tuple of dictionaries. For example,

cursor = connection.cur         


        
相关标签:
7条回答
  • 2020-12-01 07:54
    list= [list[0] for list in cursor.fetchall()]
    

    this will render results in one list like - list = [122,45,55,44...]

    0 讨论(0)
  • 2020-12-01 07:54
    cursor.execute("""Select * From bs WHERE (id = %s)""",(id))
    
    cursor.fetchall()
    
    0 讨论(0)
  • 2020-12-01 07:56

    This old Q comes up on Google while searching for flattening db queries, so here are more suggestions...

    Consider a fast list-flattening iterator.

    Others answers use fetchall() which first loads all rows in memory, then iterates over that to make a new list. Could be inefficient. Could combine with MySQL so-called server side cursor:

    # assume mysql on localhost with db test and table bs
    import itertools
    import MySQLdb
    import MySQLdb.cursors
    
    conn = MySQLdb.connect(host='localhost',db='test', 
              cursorclass=MySQLdb.cursors.SSCursor ) 
    cursor = conn.cursor()
    # insert a bunch of rows
    cursor.executemany('INSERT INTO bs (id) VALUES (%s)',zip(range(1,10000)) )
    conn.commit()
    # retrieve and listify
    cursor.execute("select id from bs")
    list_of_ids = list(itertools.chain.from_iterable(cursor))
    len(list_of_ids)
    #9999
    conn.close()
    

    But the question is also tagged Django, which has a nice single field query flattener

    class Bs(models.Model):
        id_field = models.IntegerField()
    
    list_of_ids = Bs.objects.values_list('id_field', flat=True)
    
    0 讨论(0)
  • 2020-12-01 08:03

    I'm sure that after all this time, you've solved this problem, however, for some people who may not know how to get the values of a cursor as a dictionary using MySQLdb, you can use this method found here:

    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)
  • 2020-12-01 08:09

    If there is only one field, i can use this to make a list from database:

    def getFieldAsList():
        kursor.execute("Select id from bs")
        id_data = kursor.fetchall()
        id_list = []
        for index in range(len(id_data)):
            id_list.append(id_data[index][0])
        return id_list
    
    0 讨论(0)
  • 2020-12-01 08:17

    Make your cursor object in this manner:

    db = MySQLdb.connect("IP", "user", "password", "dbname")
    
    cursor = db.cursor(MySQLdb.cursors.DictCursor)
    

    Then when you perform cursor.fetchall() on a query, a tuple of dictionaries will be obtained, which you can later convert to a list.

    data = cursor.fetchall()
    
    data = list(data)
    
    0 讨论(0)
提交回复
热议问题