>>> 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)) )
come posso convertire le tuple restituite di oggetti in tuple di stringhe, Qualcosa del genere:
(("1", "2014-05-21 00:00:00"), ("2", "2014-05-22 00:00:00"))
risposte:
3 per risposta № 1Semplicemente itera gli oggetti e convertili in tuple, come questo
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"))
Qui abbiamo usato due espressioni generatore. Il più interno (str(item) for item in items
) verrà eseguito per ogni elemento della tupla originale. E quando gli elementi nidificati sono stringificati, iteriamo l'espressione del generatore e lo convertiamo nuovamente in una tupla.
2 per risposta № 2
Chiamata str
su ogni elemento:
>>> [tuple(map(str, tup)) for tup in tups]
[("1", "2014-05-21 00:00:00"), ("1", "2014-05-22 00:00:00")]
Funziona perché datetime
gli oggetti implementano __str__
metodo, essendo chiamato da str
funzione. Dal documentazione:
Per una data d, str (d) è equivalente a d.isoformat ("").
1 per risposta № 3
Questo dovrebbe fare il trucco:
out = tuple((str(k),str(v)) for (k,v) in rows)