/ / Convertir una tupla de objetos en una tupla de cadenas - python, tuplas

Convierta una tupla de objetos en una tupla de cuerdas: python, tuplas

>>> 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 № 1

Simplemente 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)