2013-02-14 25 views
1

我有一個小的方法來從MySQL數據庫中獲取一列。它的工作原理,但它返回一個元組,如:獲取只有一個MySQL列作爲列表而不是元組

((1L,),(2L,),(3L,), ...) 

我希望得到的只是一個列表[1L, 2L, 3L,...](甚至是鑄造爲int,而不是長期)。我知道我可以編寫一個循環來手動執行,但可能會有一些更奇特的做法。

這是我的函數的代碼,以防萬一有一種方法可以直接將MySQL結果導入列表中,我還沒有聽說過!

def getFTPSentNotamIds(): 
    selectedIds = None 
    try: 
     # Connect to database 
     db = MySQLdb.connect(host=Constants.database_host, 
          user=Constants.database_user, 
          passwd=Constants.database_passwd, 
          db=Constants.database_name) 

     # Create a cursor to execute queries 
     cursor = db.cursor() 

     # Get every ObjectID of those objects which are Selected=1 
     cursor.execute('SELECT ObjectID FROM MYTABLE WHERE Selected=1') 

     # Get the NOTAMS 
     selectedIds = cursor.fetchall() 
    except MySQLdb.Error, e: 
     print 'ERROR ' + str(e.args[0]) + ': ' + str(e.args[1]) 
    return selectedIds 

回答

2

在返回值中的每個元組代表一行,如果只有1行中的元素,

你可以使用列表理解像下面獲取包含對象ID的爲你的清單:

In [38]: l = ((1L,),(2L,),(3L,)) 

In [39]: [x[0] for x in l] 
Out[39]: [1L, 2L, 3L] 

在你的功能你可以做return [x[0] for x in selectedIds]

+0

bleh,這消耗遊標,前加載所有的查詢數據。它確實有效,但請注意,這種行爲適合您的應用程序。 – ThorSummoner 2016-04-24 06:36:53

相關問題