for fetchone fetchmany data cur python django mysql-python

python - fetchone - pyodbc fetchmany



Python MySQLDB: Obtenga el resultado de fetchall en una lista (6)

Me gustaría obtener el resultado de la operación fetchall en una lista en lugar de tupla de tupla o tupla de diccionarios. Por ejemplo,

cursor = connection.cursor() #Cursor could be a normal cursor or dict cursor query = "Select id from bs" cursor.execute(query) row = cursor.fetchall()

Ahora, el problema es que la fila resultante es ((123,), (234,)) o ({''id'': 123}, {''id'': 234}) Lo que estoy buscando es (123,234) o [ 123,234]. Será mejor si puedo ahorrar en analizar el resultado. Gracias por adelantado


¿Y qué hay de las listas de comprensión? Si el resultado es ((123,), (234,), (345,)) :

>>> row = [item[0] for item in cursor.fetchall()] >>> row [123, 234, 345]

Si el resultado es ({''id'': 123}, {''id'': 234}, {''id'': 345}) :

>>> row = [item[''id''] for item in cursor.fetchall()] >>> row [123, 234, 345]


Esta antigua Q aparece en Google mientras busca consultas de db de aplanamiento, así que aquí hay más sugerencias ...

Considere un iterador de aplanamiento de listas rápido.

Otras respuestas usan fetchall() que primero carga todas las filas en la memoria, luego lo itera para hacer una nueva lista. Podría ser ineficiente. Podría combinarse con el llamado cursor del lado del servidor de MySQL:

# 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()

Pero la pregunta también está etiquetada como Django, que tiene un buen acoplador de consultas de campo único.

class Bs(models.Model): id_field = models.IntegerField() list_of_ids = Bs.objects.values_list(''id_field'', flat=True)


Estoy seguro de que después de todo este tiempo, ha resuelto este problema; sin embargo, para algunas personas que no saben cómo obtener los valores de un cursor como un diccionario que usa MySQLdb, puede usar este método que se encuentra 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"]


Haga su objeto de cursor de esta manera:

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

Luego, cuando realice cursor.fetchall () en una consulta, se obtendrá una tupla de diccionarios, que luego puede convertir a una lista.

data = cursor.fetchall() data = list(data)


Si solo hay un campo, puedo usar esto para hacer una lista de la base de datos:

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


cursor.execute("""Select * From bs WHERE (id = %s)""",(id)) cursor.fetchall()