1

MySQL データベースから 1 つの列を取得する小さな方法があります。動作しますが、次のようなタプルを返しています:

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

リストだけを取得したい[1L, 2L, 3L,...](または long ではなく int にキャストしたい)。ループを記述して手動で実行できることはわかっていますが、おそらく、より洗練された、より Python 的な方法があります。

これは、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 つしかない場合、戻り値の各タプルは 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 に答える