Это является раздражающим как Python sqlite3
модуль всегда возвращает список кортежей! Когда я запрашиваю отдельный столбец, я предпочел бы получать простой список.
например, когда я выполняюсь
SELECT somecol FROM sometable
и звоните
cursor.fetchall()
это возвращается
[(u'one',), (u'two',), (u'three',)]
но я просто добрался бы
[u'one', u'two', u'three']
Существует ли способ сделать это?
На самом деле вы не хотите этого делать - все, что вы делаете в рамках использования zip или понимания списка, просто съедает циклы процессора и высасывает память, не добавляя значительной ценности. Вам гораздо лучше работать с кортежами.
Что касается , почему он возвращает кортежи, это потому, что это то, что Python DBD API 2.0 требует от fetchall
.
учетная запись для случая, когда cursor.fetchall () возвращает пустой список:
try:
columnlist = list(zip(*cursor.fetchall())[COLUMN_INDEX])
except IndexError:
columnlist = []
data=cursor.fetchall()
COLUMN = 0
column=[elt[COLUMN] for elt in data]
(Мое предыдущее предложение, column = zip (* data) [COLUMN]
, вызывает IndexError
, если data
) пустой кортеж. Напротив, приведенное выше понимание списка просто создает пустой список. В зависимости от вашей ситуации, повышение IndexError
может быть предпочтительнее, но я оставлю это вам решать.)