2013-02-14 42 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

相关问题