1

我有一个小方法可以从 MySQL 数据库中获取一列。它有效,但它返回一个元组,如:

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

我只想得到一个列表[1L, 2L, 3L,...](或者甚至转换为 int 而不是 long)。我知道我可以编写一个循环来手动完成,但可能有一种更奇特、更蟒蛇的方式来做这件事。

这是我的函数的代码,以防万一有某种方法可以将 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
4

1 回答 1

2

返回值中的每个元组代表一行,如果该行中只有 1 个元素,

您可以使用如下列表理解来获取包含 ObjectID 的列表:

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]

于 2013-02-14T10:24:07.800 回答