Получите список значений полей из Python sqlite3, не кортежи, представляющие строки

Это является раздражающим как Python sqlite3 модуль всегда возвращает список кортежей! Когда я запрашиваю отдельный столбец, я предпочел бы получать простой список.

например, когда я выполняюсь

SELECT somecol FROM sometable

и звоните

cursor.fetchall()

это возвращается

[(u'one',), (u'two',), (u'three',)]

но я просто добрался бы

[u'one', u'two', u'three']

Существует ли способ сделать это?

40
задан Mark Amery 31 January 2016 в 20:39
поделиться

3 ответа

На самом деле вы не хотите этого делать - все, что вы делаете в рамках использования zip или понимания списка, просто съедает циклы процессора и высасывает память, не добавляя значительной ценности. Вам гораздо лучше работать с кортежами.

Что касается , почему он возвращает кортежи, это потому, что это то, что Python DBD API 2.0 требует от fetchall .

9
ответ дан 27 November 2019 в 01:24
поделиться

учетная запись для случая, когда cursor.fetchall () возвращает пустой список:

try:
    columnlist = list(zip(*cursor.fetchall())[COLUMN_INDEX])
except IndexError:
    columnlist = []
-1
ответ дан 27 November 2019 в 01:24
поделиться
data=cursor.fetchall()
COLUMN = 0
column=[elt[COLUMN] for elt in data]

(Мое предыдущее предложение, column = zip (* data) [COLUMN] , вызывает IndexError , если data ) пустой кортеж. Напротив, приведенное выше понимание списка просто создает пустой список. В зависимости от вашей ситуации, повышение IndexError может быть предпочтительнее, но я оставлю это вам решать.)

14
ответ дан 27 November 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: