2010-09-23 90 views
0

我有一個非常大的表(374870行),當我運行下面的代碼時間戳剛結束是一個長整型與價值374870 ....我想能夠抓住表中的所有時間戳.. 。但我得到的是一個長整型:S爲什麼我不能在python中讀取sql語句?

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) 

回答

2

試試這個:

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

這個解決方案的工作原理,謝謝eumiro。仍然有點煩惱,fetchall()不起作用。 – Richard 2010-09-23 13:54:29

+0

你可以把我的第四行改成''for rec in cur.fetchall():'它也可以工作。 – eumiro 2010-09-23 13:56:20

+1

arg,Brain去了。那就是我搞砸了。獲取函數屬於遊標對象:S – Richard 2010-09-23 14:01:11

1

你需要調用fetchmany()光標獲取多行,或致電fetchone()在一個循環,直到它返回None

+0

問題是時間戳最終是一個長整型...也許是由於我的表的大尺寸。所以fetchone()fetchmany()或fetchall()不適用於時間戳,因爲long int對象沒有這些函數... – Richard 2010-09-23 13:47:22

+0

@Richard,374870並不是一個真正的大表。試試我的答案,你會看到'timestamps'列表可以容納你的數據。如果你告訴我它現在的樣子,我們可以嘗試將它轉換爲你需要的任何格式。 – eumiro 2010-09-23 13:51:46

+0

@Richard:fetchone和朋友都是**光標**方法。看到我的答案。 – 2010-09-23 14:13:23

0

考慮一下你得到的非常長整數是查詢結果中行數的可能性。考慮閱讀文檔(PEP 249)...(1)cursor.execute()的返回值未定義;你所看到的特別是你的數據庫,爲了便於攜帶,不應該依賴它。 (2)你需要做results = cursor.fetch{one|many|all}()或迭代遊標... for row in cursor: do_something(row)

相關問題