>>> import MySQLdb
>>> db = MySQLdb.connect( host = "localhost", user ="root", passwd = "", db = "smoky_db" )
>>> cur = db.cursor()
>>> cur.execute( "SELECT * FROM logs" )
3L
>>> rows = cur.fetchall()
>>> rows
((1L, datetime.datetime(2014, 5, 21, 0, 0)), (1L, datetime.datetime(2014, 5, 22, 0, 0)) )
¿Cómo puedo convertir las tuplas de objetos devueltos en tuplas de cadenas, algo como esto:
(("1", "2014-05-21 00:00:00"), ("2", "2014-05-22 00:00:00"))
Respuestas
3 para la respuesta № 1Simplemente itere los elementos y conviértalos en tuplas, como este
print tuple(tuple(str(item) for item in items) for items in d)
# (("1", "2014-05-21 00:00:00"), ("1", "2014-05-22 00:00:00"))
Aquí hemos utilizado dos expresiones generadoras. El más interno (str(item) for item in items
) se ejecutará para cada elemento en la tupla original. Y cuando los elementos anidados están ordenados, iteramos la expresión del generador y la convertimos en una tupla nuevamente.
2 para la respuesta № 2
Llamada str
en cada elemento:
>>> [tuple(map(str, tup)) for tup in tups]
[("1", "2014-05-21 00:00:00"), ("1", "2014-05-22 00:00:00")]
Esto funciona porque datetime
objetos implementan __str__
método, siendo llamado por str
función. Desde el documentación:
Para una fecha d, str (d) es equivalente a d.isoformat ("").
1 para la respuesta № 3
Esto debería funcionar:
out = tuple((str(k),str(v)) for (k,v) in rows)