Как удалить u из sqlite3 cursor.fetchall() в python

import sqlite3
class class1:
def __init__(self):
    self.print1()
def print1(self):
    con = sqlite3.connect('mydb.sqlite')
    cur = con.cursor()
    cur.execute("select fname from tblsample1 order by fname")
    ar=cur.fetchall()
    print(ar)

class1()

дает результат, как показано ниже

[(u'arun',), (u'kiran',), (u'kulku',), (u'sugu',)]

Мне нужно удалить u из массива, и мне нужен вывод, как показано ниже

['arun', 'kiran', 'kulku', 'sugu']

Ответы

Ответ 1

Если вам нужны, чтобы строки, полученные из вашей базы данных sqlite, были возвращены как UTF-8 вместо Unicode, настройте свое соединение соответствующим образом с помощью свойства text_factory:

import sqlite3
class class1:
def __init__(self):
    self.print1()
def print1(self):
    con = sqlite3.connect('mydb.sqlite')
    con.text_factory = str
    cur = con.cursor()
    cur.execute("select fname from tblsample1 order by fname")
    ar=cur.fetchall()
    print(ar)

class1()

См. подробности: http://docs.python.org/library/sqlite3.html#sqlite3.Connection.text_factory

Это касается "u" перед вашими строками. Затем вам нужно преобразовать список кортежей в список:

ar=[r[0] for r in cur.fetchall()]

Ответ 2

Префикс u указывает, что строка представляет собой строку Unicode. Если вы уверены, что строка является базовой строкой ASCII, вы можете преобразовать строку unicode в не-unicode с простым str().

Пример:

unicode_foo = u"foo"
print unicode_foo
>>> u"foo"

print str(unicode_foo)
>>> "foo"

В вашем случае, со списком кортежей, вам придется делать это с пониманием списка python:

ar = [[str(item) for item in results] for results in cur.fetchall()]

Где results - список кортежей, возвращаемых fetchall, а item - члены кортежей.

Ответ 3

u сообщает вам, что это строки Unicode. чтобы распечатать список кортежей в указанном вами формате, который вы могли бы использовать:

>>> myformat="['%s']"%"', '".join([t[0] for t in ar])
>>> print myformat
['arun', 'kiran', 'kulku', 'sugu']

изменить:// Пример для KIRAN с u и в результирующем наборе:

>>> ar=[(u'u',), (u'u',), (u',,,u,,u,',)]
>>> myformat="['%s']"%"', '".join([t[0] for t in ar])
>>> print myformat
['u', 'u', ',,,u,,u,']

Ответ 4

Я просто добавляю эту строку, и она работает

conn.text_factory = str