2010-09-23 4 views
0

J'ai une très grande table (374870 lignes) et quand je cours l'horodatage de code suivant finit par être un int long avec la valeur 374870 .... Je veux pouvoir saisir tous les horodateurs dans la table .. . mais tout ce que je reçois est un long int: SPourquoi ne puis-je pas récupérer les instructions sql en python?

import MySQLdb 

db = MySQLdb.connect(
       host = "Some Host", 
       user = "SOME USER", 
       passwd = "SOME PASS", 
       db  = "SOME DB", 
       port = 3306 

     ) 

sql = "SELECT `timestamp` from `table`" 

timestamps = db.cursor().execute(sql) 

Répondre

2

Essayez ceci:

cur = db.cursor() 
cur.execute(sql) 
timestamps = [] 
for rec in cur: 
    timestamps.append(rec[0]) 
+0

Cette solutions fonctionne, Merci eumiro. encore un peu agacé que fetchall() ne fonctionne pas. – Richard

+0

vous pouvez changer ma quatrième ligne en 'pour rec dans cur.fetchall():' et il travaillera aussi – eumiro

+1

arg, Brain allé à mush. c'est ce que je faisais. Les fonctions d'extraction appartiennent à l'objet curseur: S – Richard

1

Vous devez appeler fetchmany() sur le curseur pour aller chercher plus d'une ligne, ou appelez fetchone() dans une boucle jusqu'à ce que il renvoie None.

+0

le problème est que l'horodatage finit par être un int long ... Peut-être en raison de la grande taille de ma table. donc fetchone() fetchmany() ou fetchall() ne fonctionnera pas pour les horodatages car un objet int long n'a pas ces fonctions ... – Richard

+0

@Richard, 374870 n'est pas vraiment une grande table. Essayez ma réponse et vous verrez que la liste 'timestamps' peut accueillir vos données. Si vous me dites à quoi cela ressemble maintenant, nous pouvons essayer de le convertir dans n'importe quel format. – eumiro

+0

@Richard: fetchone et les amis sont des méthodes ** cursor **. Vois ma réponse. –

0

Envisagez la possibilité que l'entier pas très long que vous obtenez soit le nombre de lignes dans le résultat de votre requête. Vous pouvez lire les documents (PEP 249) ... (1) La valeur renvoyée par cursor.execute() n'est pas définie; ce que vous voyez est particulier à votre base de données et pour la portabilité ne devrait pas être invoqué. (2) vous devez faire results = cursor.fetch{one|many|all}() ou itérer sur le curseur ... for row in cursor: do_something(row)

Questions connexes